0926Appium app自动化测试经验分享

今天写完了公司产品DDM的安卓客户端的部分特别简单的用例,基本覆盖了各个模块最基础、最简单操作,是目前最能够体现我水平的一个脚本。

个人博客:https://blog.csdn.net/zyooooxie

一)

前两天解决了一个大概困扰我2个月的问题:关于app自动化测试中,那些没有id、不想用class属性来定位,但是text属性不同,如何来元素等待、定位方面的。

A.定位操作

我最常用的定位是driver.find_element_by_android_uiautomator(‘new UiSelector().text(“XXXXXX”)’).click();

但是如何来实际用呢?如何把text的值如何传递到里面?【数据与脚本分离】

因为value是个字符串,传递进去时某个写的值,无法实际引到你的元素定位上。直到我无意间尝试,使用到格式化字符,突然通了。

driver.find_element_by_android_uiautomator(‘new UiSelector().text("%s")’ % XXX).click()
这就是解决方法。XXX是某元素的text值。

B.元素等待

使用text的来查找元素等待 使用显式等待,有2种方式:

1 WebDriverWait(self.driver, 10,).until(EC.text_to_be_present_in_element((By.XPATH, locator), text))
2 WebDriverWait(self.driver, 10).until(lambda self.driver: self.driver.find_element(by, locator).is_displayed())

第一种等待 是说这个元素的text属性 和你给的参数 做对比;

推荐第二种,只要定好位,查找可见。但是!考虑到前提(那些没有id、不想用class属性来定位,但是text属性不同:如果使用id class 属性那就用不着text来定位了) 我就只好推荐xpath定位,那又和第一种没啥不同了。

二)

app的xpath定位 推荐是 ‘//class[@text=“XXXX”]’ 和 ‘//class[contains(@text,“XXXX”)]’

目前就拿这2个来主要定位。
自己写的相对路径 确实比uiautomatorviewer 和appium 给的绝对路径方便多了。

三)

我一直在考虑如何优化app自动化脚本的运行速度

我写的100个用例起码 跑1个半小时左右。除了使用分布式借助多台设备的方法外,目前我尽量在脚本少用了xpath定位,使用显式等待,少用强制等待,几乎不用隐式等待。

另外 我想到的是 减少app的重启次数,借助装饰器@classmethod,虽然是可以减少次数,但是只要一个用例执行时候出错,其他都得挂了。所以我还没想通,如何更理想来做。

【web自动化,我也是运用装饰器@classmethod,减少了启动浏览器的次数:执行一个用例后,下一个用例前面添加一个刷新 refresh;此外web自动化脚本因为执行速度快,也用不了多长时间。】

四)

不初始化app,减少登录的次数

我之前整理3个方法 :
1.脚本设置启动服务的时候,desired_caps[“noReset”] = True,强烈推荐把这个也写到appium的inspector里面,不然每次定位元素的时候也会重置;
2.要不就初始化setUp时候,把登录步骤写到初始化里面;
3.使用装饰器@classmethod,只要登录一次,后面用例可以不登录。

五)

最不推荐的坐标定位方法

app自动化测试最无语的 应该是要属坐标定位。换了手机,不同分辨率,这个坐标就不对了。得算出所在屏幕的比例(或是看前端、ui设置多少像素和倍数)或是算出不同分辨率下所在位置。

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值