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

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

本文依赖上一篇appium的配置环境,文章讲述一个基于appium测试框架的小例子,用于方便快速地了解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测试项目框架里提及,谢谢。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值