定位不到元素时候,一定很头大,最近一直在跑自动化流程,经常因为各种原因定位不到元素,经过数十次的尝试,我发现尤其是H5页面,出现定位不到元素的可能性更大,也总结尝试发现了在H5里面,通过切换上下文后用坐标点点击真的非常好用
普通的元素定位方法:
对于原生,可以通过id,text来找元素,自己写路径,对于H5 webview页面,则可以通过copy xpath找元素,直接获取xpath路径,比如下图示例选中我要选的元素,比如我这里想定位标题,直接右键
点击,copy, copy xpath即可完成元素xpath路径的提取
接下来验证我们复制的xpath路径,在console控制台下,输入
$x('复制的xpath路径粘贴到这里'),可以很明显看到标题内容被我们提取到
![77a2ea34c65932e29687bfa5d381e6b0.png](https://i-blog.csdnimg.cn/blog_migrate/3a295a8e089fce6d7ea32f8630293dd5.jpeg)
方法:tap方法,即可
driver.tap([(x,y)])
但这个方法不完善,这个坐标是以我的手机分辨率为基准的坐标,如果换了一台手机分辨率不一致,那么坐标就会变,可能点不到我们想点的位置,我这里写了一个通用的方法,前提是不同设备的分辨率不一致,但是宽高比例一致,比如我这里x1和y1是我测试时候的坐标,手机分辨率是1080*1920,计算出横纵坐标在整个手机的比例rate_x,rate_y,如果换了一台设备,则获取设备的尺寸get_size(),然后分别乘以刚才的比率即可得出新的坐标点
rate_x = x1/1080
rate_y = y1/1920
size_x,size_y = self.get_size()
x = size_x * rate_x
y = size_y * rate_y
print(x,y)
self.driver.tap([(x,y)])
注意事项,原生和H5相互切换要切换上下文,坐标点点击场景为安卓原生,要切换到NATIVE_APP,如果涉及H5和原生相互切换,一定要注意上下文的切换,不然程序跑不起来
driver.switch_to.context("上下文名称")
原生APP的上下文:NATIVE_APP公众号H5的上下文:WEBVIEW_com.tencent.mm:tools
python爬虫人工智能大数据公众号