TA的每日心情 | 郁闷 2022-8-29 14:43 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]测试小兵
|
一,构建测试项目
因为是第一个小例子,为了方便起见,我将这个测试项目放进了我的Android项目工程目录中,当做
了一个Java Library新建出来,构建过程如下图所示:
新建完之后会看到如下工程目录:
二,准备测试项目依赖的SDK
在项目的libs目录下引入以下几个jar包:
- java-client-4.1.2.jar 下载地址:http://maven.outofmemory.cn/io.appium/java-client/
- selenium-server-standalone.jar 下载地址:http://download.csdn.net/detail/qhshiniba/7663361
- mysql-connector-java-6.0.5.jar 下载地址:https://dev.mysql.com/downloads/connector/j/ 这个用
于数据库查询,可暂时不引入
java-client java方面的类库调用库,二次编程库
selenium-server-standalone appium做自动化测试的核心jar,里面各种定位和调用浏览器的元素的方
法都集成好了
mysql-connector-java-6.0.5 MySQL数据库连接jar
三,准备第一个测试案例
我们这边使用一个简单的通讯录Demo作为我们的测试APP,
下载地址在这:https://github.com/appium/sample ... apps/ContactManager
/ContactManager.apk
那第一步就是将这个apk包放入我们项目的一个目录中,比如我新建一个apps的文件夹,将apk包放入,
类似于这样:
然后在包目录下新建一个文件,比如AndroidContactsTest.java。这样我们得到类似于这样的目录:
目录结构和文件都准备完毕,我们就可以开始编写我们的测试案例代码了
以下是我的AndroidContactsTest.java代码,先贴出来,特殊的地方我会强调说明,大家按照自己的配
置进行更换。
- public class AndroidContactsTest {
- //Driver
- private AppiumDriver<AndroidElement> driver;
- /**
- * 配置启动driver
- * @throws Exception
- */
- @Before
- public void setUp() throws Exception {
- File classpathRoot = new File(System.getProperty("user.dir"));
- //app的目录,此处注意,因为我们是把测试项目直接放在APP项目里的,所以路径需要注意
- File appDir = new File(classpathRoot, "/mydemotest/src/main/java/apps/");
- //app的名字,对应你apps目录下的文件
- File app = new File(appDir, "ContactManager.apk");
- //创建Capabilities
- DesiredCapabilities capabilities = new DesiredCapabilities();
- //设置要调试的模拟器的名字,这是为模拟器提供的方法,填上你模拟器的名字,真机测试使用下方set "udid"的方法,此设置可忽略
- capabilities.setCapability("deviceName","20f298f3");
- //设置模拟器的系统版本
- capabilities.setCapability("platformVersion", "4.4");
- //设置真机的ID,连接好手机后,终端定位到Android SDK目录下的platform-tools文件夹,输入命令 ./adb devices(mac上适用),Windows大同小异,获取到udid后填入即可
- capabilities.setCapability("udid", "20f298f3");
- //设置app的路径
- capabilities.setCapability("app", app.getAbsolutePath());
- //设置app的包名
- capabilities.setCapability("appPackage", "com.example.android.contactmanager");
- //设置app的启动activity
- capabilities.setCapability("appActivity", ".ContactManager");
- //启动driver
- driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
- }
- @After
- public void tearDown() throws Exception {
- //测试完毕,关闭driver,不关闭将会导致会话还存在,下次启动就会报错
- driver.quit();
- }
- /**
- * 要执行的的测试方法
- */
- @Test
- public void addContact(){
- //利用Xpath的方法寻找text值为Add Contact的控件
- WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']"));
- //点击这个控件
- el.click();
- //利用类名获取界面上所有的EditText
- List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
- //第一个EditText输入内容Some Name
- textFieldsList.get(0).sendKeys("Some Name");
- //第三个EditText输入内容Some Name
- textFieldsList.get(2).sendKeys("Some@example.com");
- //在坐(100,500)滑动到(100,100) 时间为2毫秒
- driver.swipe(100, 500, 100, 100, 2);
- //用xpath的方式寻找到text值为Save的控件,然后点击
- driver.findElementByXPath(".//*[@text='Save']").click();
- }
- }
复制代码 这个测试案例一共三个方法,setup方法作为一个初始化方法,提供了appium启动的一些配置参数,主
要就是包路径,调试设备的一些信息,启动的页面的一些信息。
第二个方法teardown主要是将driver释放,这里注意每次测试案例跑完才可以再次运行,不然会报错。
第三个方法就是我们这个测试案例最主要的方法了,代码注释里写了一些自动模拟UI操作的一些方法,
只涉及了很少几步,但对于我们第一个测试案例来讲,掌握大概逻辑,实现一小个例子是我们的目的,
就跟一个HelloWorld对于一个开发的意义一样。
三,执行测试案例可能会遇到的问题
讲完这些介绍,相信大部分人可以开始动手实现了,这里还是得提一些注意点,因为光有上面这些代码,
你可能还不足以运行起这个例子,下边讲一些你可能会遇到的问题:
问题一,无法运行,提示org.openqa.selenium.WebDriverException: Unable to parse remote response:
Parameters were incorrect. We wanted 。。。
这个问题刚碰到是我也很懵逼,不知道为啥,看报错的意思就是参数不对,不是想要的参数,报错在
//启动driver
driver = new AndroidDriver<>(new URL(“http://127.0.0.1:4723/wd/hub“), capabilities);
这一行,之后我想可能是版本太高导致的,于是把selenium-server-standalone的版本换低了一些,我现
在使用的版本是2.42.2,替换过之后测试案例可以正常跑起来了,如果有人遇到类似的问题可以尝试更
换一下版本解决。
问题二,测试案例在手机上一跑跳出一个权限申请框就结束了
这个问题其实不应说是测试项目的问题,而是在appium测试框架下还无法自动定位到手机系统弹出的权
限申请框,当然也不是绝对的,网上提供了几个解决办法,大家可以去搜索一下,我们这的解决办法就
是手动给予权限,等测试案例跑完,再次执行的时候就能正确地进入我们APP了
三,测试案例扩展
鉴于我们这个demo是个特别简单的例子,在掌握了之后想做一些改动扩展以用于巩固并学习appium提
供给我们的测试方法,那么这个时候我们需要了解几个基础工具,用于方便我们进行页面操作。
工具一:uiautomatorviewer
这个工具是AndroidSDK提供的一个用于获取页面元素信息的一个工具,在Android SDK目录下的tools文
件夹中,打开后如图所示,可以方便地知道页面元素的ID和XPath
‘
’工具二:更多测试方法,请见官方文档:https://github.com/appium/appium/blob/master/docs/
en/writing-running-appium/appium-bindings.md
到此我们第一个测试案例的整个流程就讲完了,更多appium框架提供的测试方法我将会在下一篇
一个基础的appium测试项目框架里提及,谢谢。
|
|