美文网首页
Python Appium自动化测试 元素定位(三)

Python Appium自动化测试 元素定位(三)

作者: 白码会说 | 来源:发表于2020-12-01 22:16 被阅读0次

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的定位方式更加多以及更加适用,并不是只有这一个,它也不仅支持classNameid等定位,而且还支持模糊匹配进行定位,这样是不是感觉更高大上呢?下面简单介绍一下。

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.(时间会证明一切)

相关文章

网友评论

      本文标题:Python Appium自动化测试 元素定位(三)

      本文链接:https://www.haomeiwen.com/subject/jbyewktx.html