前言
现在混合开发的App已经逐渐成为主流趋势,其迅速、便捷和高效的特性让它受到了不少移动应用开发者的青睐。然而对于测试人员而言,着实有点“苦不堪言”的味道。
对于移动应用中最常见的内嵌网页,还好Appium可以切换WebView并且使用Appium独有的强大定位方式——UIAutomator Selector,让测试人员总算可以跟上开发的步伐,使得App自动化测试勉强能够运行。
除此之外,在Appium的测试中,想要实现一套代码在不同的Android手机上完美运行似乎是一个头等难题,本文介绍了Appium UIAutomator Selector的使用方式和对比了一些传统的定位方式,意在为一些Appium自动化测试中常见的难题提供一些思路和愚见。
本文基于Java语言描述,自动化测试的内容中,Java和Python几乎差不多,甚至Python的语法还会更加简介和易懂一点。
UIAutomator Selector:点击页面上的文字
- 以查找页面上的登录按钮并且点击为例:
driver.findElementByAndroidUIAutomator("new UiSelector().text(\"登录\")").click();
- 将其封装成方法:
public void clickText(String content) {
driver.findElementByAndroidUIAutomator("new UiSelector().text(\"" + content + "\")").click();
}
其他定位页面文字的方式:Xpath
driver.findElementByXPath("//*[@text='登录']").click()
其实单论效果,Xpath也可以达到理想中的效果,不过就如本文的前言,对于混合开发的App,Xpath很多时候会力不从心,而UIAutomator Selector不需要顾忌太多。
拓展:若页面上有多个文字相同的元素,怎么用UIAutomator Selector定位
List<AndroidElement> elementsByAndroidUIAutomator = driver.findElementsByAndroidUIAutomator("new UiSelector().text(\"个人信息\")");
elementsByAndroidUIAutomator.get(1).click();//点击页面上第二个“个人信息”
因为Android机型导致的元素变化
同样的App,在不同的Android机型上显示出的根元素也许会不同。
以文字TextView为例,在有些手机上是以TextView的方式显示,但是在某些手机上会变成View的形式,如果使用元素id、xpath等方式,很容易导致切换手机测试后测试卡住,最后排查良久无果,所以最好使用UIAutomator Selector进行定位,尽可能实现不同机器间运行同一套测试代码、减少代码的修改。