Time will tell.
1、android uiautomator text 定位
如果之前有写过一些脚本,发现有时候一些元素不能够很好地定位,这时就需要采用android uiautomator
去定位,它是一种非常强有力的定位方式,原理是通过 android 自带的android uiautomator
的类库去查找元素。
一起看下面的图:
在上面的图片中我们不采用 appium 封装好的方法,直接使用 android 的uiautomator
去定位,结果如下:
user = new Uiobject(new UiSelector().text("请输入淘宝账户"))
user.setText("test")
上面这个看不懂也没关系,因为接下来讲的是 appium 已经对它进行了封装的方法,这里只是让你看一看它原始方法。它会根据你的定位信息new
一个对象出来,然后再在你new
的对象之上进行相关操作。下面我们看一下在 appium 中的实现方法:
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().text("请输入淘宝账户")')
ele.send_keys("123")
对比两种代码的写法,可以发现它们的相同之处只有最后的定位信息是一样的,即:new UiSelector().text("请输入淘宝账户")
,简单地说就是根据一定条件来查找元素,我们这里的条件就是text
属性为 “请输入淘宝账户” ,再根据图片去理解是不是很容易呢。
android uiautomator
的元素定位其实和appium
的定位一样,或者说它比appium
的定位方式更加多以及更加适用,并不是只有这一个,它也不仅支持className
、id
等定位,而且还支持模糊匹配进行定位,这样是不是感觉更高大上呢?下面简单介绍一下。
2 、uiautomator text 模糊定位
模糊定位就是通过text
的部分信息就能够进行定位。
代码:
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("请输入淘")')
ele.send_keys("123")
上面的代码中,只是将.text()
的方法变成了.textContains()
,在方法中传入模糊的数据就好。看到这里是否有人思考过一个问题,既然有类似的模糊寻找,那么有没有像正则表达式一样的查找呢?答案是肯定的。
3、 textMatches 正则匹配查找
textMatches故名思义就是通过正则的来进行查找定位,他也是通过text的属性来进行正则匹配,我们直接看代码:
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^请输入淘.*")')
ele.send_keys("123")
上面匹配的一些信息可能一些刚做测试的小伙伴不是很了解,这个不要紧,下来可以搜索一下正则表达式教程,稍微了解一下就可以。
4、 uiautomator resourceID 定位
resourceId
定位和appium
封装好的id
定位是一样的,只是这里将写法变成了uiautomator
的写法而已。
代码:
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.taobao.taobao:id/aliuser_login_account_et")')
ele.send_keys('234')
上面的代码和之前的代码对比,可能发现其实它们前面都是一样的,只是在定位的时候发生了一些变化,text
变换成了resourceID
即可,也就是页面对象属性的信息进行变更了,其他方法都是一样。下面其他方法我就不浪费篇幅,只给大家做一个简单的案例展示。
5、 resourceIDMatches 定位
通过id
进行正则匹配定位
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".+aliuser_login_account_et")')
ele.send_keys('234')
6、uiautomator className 定位
通过调用android uiautomator
使用className
进行定位。
代码:
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")')
ele.send_keys('234')
7、 uiautomator classNameMatches 定位
通过className
正则匹配进行定位。
代码:
ele = self.driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches (".*EditText")')
ele.send_keys('234')
通过上面的讲解,我相信大家对uiautomator
的定位有了一定的了解,但这个并不是所有的,还有很多定位方式,这个需要大家在以后不断学习中去积累,在这里只是给大家起个头,并且希望大家在学习定位时,不只是看 appium
的定位,毕竟它也是封装的uiautomator
的定位方式,所以在学习appium
的同时把uiautomator
去大概学习一下这个很有帮助,并且对以后的提升自己以及工作中重新封装appium
有很大的帮助。
测试是一门技术,也是一门艺术。也许你今天拥有的技术,明天就会淘汰。我们需要开拓思维和眼界,积极拥抱变化,学习新知识、新方法、新技能、计算机领域讲究的是实践,学习更要讲究方式方法,学习和动手一定要结合。
好喽,内容就分享到这,如果你对Python自动化软件测试更多内容感兴趣可以加入我们扣裙一起学习175317069。有各项测试学习资源发放,更有行业深潜多年的技术人分析讲解。
最后希望看到这里的你终成为一名极具竞争力的高级测试工程师。
觉得还不错就【点赞】、【评论】、【关注】吧~
Time will tell.(时间会证明一切)