恭喜发财dife 发表于 2018-2-24 10:10:09

在Android手机上运行基于appium的第一个测试案例

一,构建测试项目

因为是第一个小例子,为了方便起见,我将这个测试项目放进了我的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-code/blob/master/sample-code/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测试项目框架里提及,谢谢。

chur@ 发表于 2018-2-26 17:22:58

楼主,DesiredCapabilities这些jar包是怎么来的啊?

梦想家 发表于 2018-2-28 16:01:47

:victory:
页: [1]
查看完整版本: 在Android手机上运行基于appium的第一个测试案例