51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2261|回复: 2
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    郁闷
    2022-8-29 14:43
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-2-24 10:10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    一,构建测试项目

    因为是第一个小例子,为了方便起见,我将这个测试项目放进了我的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代码,先贴出来,特殊的地方我会强调说明,大家按照自己的配
    置进行更换。

    1. public class AndroidContactsTest {

    2.     //Driver
    3.     private AppiumDriver<AndroidElement> driver;


    4.     /**
    5.      * 配置启动driver
    6.      * @throws Exception
    7.      */
    8.     @Before
    9.     public void setUp() throws Exception {

    10.         File classpathRoot = new File(System.getProperty("user.dir"));
    11.         //app的目录,此处注意,因为我们是把测试项目直接放在APP项目里的,所以路径需要注意
    12.         File appDir = new File(classpathRoot, "/mydemotest/src/main/java/apps/");
    13.         //app的名字,对应你apps目录下的文件
    14.         File app = new File(appDir, "ContactManager.apk");
    15.         //创建Capabilities
    16.         DesiredCapabilities capabilities = new DesiredCapabilities();
    17.         //设置要调试的模拟器的名字,这是为模拟器提供的方法,填上你模拟器的名字,真机测试使用下方set "udid"的方法,此设置可忽略
    18.         capabilities.setCapability("deviceName","20f298f3");
    19.         //设置模拟器的系统版本
    20.         capabilities.setCapability("platformVersion", "4.4");
    21.         //设置真机的ID,连接好手机后,终端定位到Android SDK目录下的platform-tools文件夹,输入命令 ./adb devices(mac上适用),Windows大同小异,获取到udid后填入即可
    22.         capabilities.setCapability("udid", "20f298f3");
    23.         //设置app的路径
    24.         capabilities.setCapability("app", app.getAbsolutePath());
    25.         //设置app的包名
    26.         capabilities.setCapability("appPackage", "com.example.android.contactmanager");
    27.         //设置app的启动activity
    28.         capabilities.setCapability("appActivity", ".ContactManager");

    29.         //启动driver
    30.         driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    31.     }

    32.     @After
    33.     public void tearDown() throws Exception {
    34.         //测试完毕,关闭driver,不关闭将会导致会话还存在,下次启动就会报错
    35.         driver.quit();
    36.     }


    37.     /**
    38.      * 要执行的的测试方法
    39.      */
    40.     @Test
    41.     public void addContact(){
    42.         //利用Xpath的方法寻找text值为Add Contact的控件
    43.         WebElement el = driver.findElement(By.xpath(".//*[@text='Add Contact']"));
    44.         //点击这个控件
    45.         el.click();
    46.         //利用类名获取界面上所有的EditText
    47.         List<AndroidElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
    48.         //第一个EditText输入内容Some Name
    49.         textFieldsList.get(0).sendKeys("Some Name");
    50.         //第三个EditText输入内容Some Name
    51.         textFieldsList.get(2).sendKeys("Some@example.com");
    52.         //在坐(100,500)滑动到(100,100) 时间为2毫秒
    53.         driver.swipe(100, 500, 100, 100, 2);
    54.         //用xpath的方式寻找到text值为Save的控件,然后点击
    55.         driver.findElementByXPath(".//*[@text='Save']").click();
    56.     }
    57. }
    复制代码
    这个测试案例一共三个方法,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测试项目框架里提及,谢谢。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    2#
    发表于 2018-2-26 17:22:58 | 只看该作者
    楼主,DesiredCapabilities这些jar包是怎么来的啊?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-21 02:32 , Processed in 0.070462 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表