【Appium|Appium+python(3)(解决APP内嵌H5页面元素无法定位问题)】测试app的时候,我们知道可以通过UI Automator Viewer进行元素定位
UI Automator Viewer元素定位见《Appium+Genymotion+robotframework+python:Android元素定位》
但是很多app中都会内嵌h5页面,这个时候定位就会变成下图这样:
文章图片
只能定位整个页面,无法定位到单独的元素。那么怎么才能够定位到h5页面的元素呢。
(1)打印出当前手机页面的context
print driver.contexts
如果包含有h5页面的话,一般至少会返回两个元素,如
[u'NATIVE_APP', u'WEBVIEW_com.test.jiayuan']
(2)切换到H5页面
driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.test.jiayuan"})
可将页面切换封装成对应的函数
def switch_h5(self):
self.driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.weizq"})def switch_app(self):
self.driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "NATIVE_APP"})
(3)确认是否已经成功切换,打印当前的context
print driver.current_context
结果为:WEBVIEW_com.test.jiayuan
(4)打印当前页面的page_source
print driver.page_source
注:一定要确认page_source是否为需测试的h5页面,可以根据该H5页面的文字在输出结果中ctrl+F查找,如果查找不到,则说明页面切换有问题,更不用指望能够成功定位元素了。
我就入过坑,在使用oppo手机测试时,我切换到了h5页面,并且打印当前context确实是正确的,但是定位元素时却始终找不到元素,以为是元素定位方式不对,从name到css到xpath都无解,然后打印出切换后的page_source,查看真的也找不到我需要定位的元素!
但是我明明是切到了h5页面了啊!百思不得其解啊!
后来将
driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "WEBVIEW_com.test.jiayuan"})
改成
driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {"name": "NATIVE_APP"})
奇迹出现了,切换到NATIVE_APP后,打印出来的page_source竟然是h5页面的源码,简直要一口老血喷出来,竟然是反着来的。后面元素定位也理所当然顺顺利利的实现了。
不知道这个问题是因为特定的APP造成的,还是其他什么原因,其他的朋友如果也遇到这样的问题,可以按照以上方法试下,看下是否同样可以解决问题。
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)