为了更方便地进行微信小程序的测试,笔者希望能够切换进webview进行操作,事件过程中问题特别多一踩一个坑,特此记录以方便大家共同进步
1)Android版本8.0以上机型get contexts得到webview_undefinded
打开D:\appium\node_modules\appium-android-driver\build\lib\webview-helpers.js
修改adb.shell('ps')为adb.shell(['ps','-A']),8.0以下不需要修改
如果使用的是desktop,那文件在C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-android-driver\build\lib文件夹下
修改之后成功获取到
2)switch_context到WEBVIEW_com.tencent.mm:tools卡住
解决方法:Step1:添加启动参数,${chromeOptions} = {'androidProcess': 'com.tencent.mm:tools'}
Step2:降低微信版本到6.7.3,后来升上去又没问题了,具体原因不清楚
做了两项修改之后切换成功
然而自动化之路并未成功,笔者又踩了一个坑,真的是崩溃啊~~~,下面讲第三个坑
3)click element提示无法定位到元素,可是元素就在那里~
使用log_source打印出当前页面代码之后,确实不是显示的这个页面
解决办法:switch_context之后需要再切换window_handles,使用robotframework的同学将
_applicationmanagement.py里面switch_to_context的代码修改如下,切换万context之后选中最后
一个handle。同程旅游APP还在使用X5内核时与此恰好相反,需要选择第一个handle,所以不同
APP可能有所不同,读者自行排查
修改之后重新启动robotframework,再次运行
查看页面代码,发现页面已经切换正确,click_element执行成功
4)然而click_element执行成功但是click时间并未生效
尝试使用executescript解决问题,结果提示$ is not defined,与chrome内核不同webview有可能executescript并能不支持执行JS。
推测该元素可能绑定的时Tap事件,使用Tap进行操作。
结果报错:NoSuchElementException: Message: An element could not be located on the page using the given search parameters
解决方案参照下面连接:
https://www.cnblogs.com/LY-CC/articles/10924469.html
最后换了一种写法,点击成功,具体原因完全不知道
5)与Chome内核不同,在webview中截图,就是会卡死的
解决方案:切换为原生状态进行截图,截图成功之后再切回响应webview
修改Rotbotframework的_screenshot.py文件中capture_page_screenshot方法
修改成功之后,利用原生状态切图成功
6)switch-contexe时切到了Chrome上去了,因为安装了chrome,程序检测到com.android.chrome会优先获取chrome的版本,卸载Chrome即可
7)起初执行没问题,升级微信之后无法点击元素
不同版本微信元素id不一样
例如微信的搜索框
6.7.3版本中 id=com.tencent.mm:id/ji
7.0.6中id=com.tencent.mm:id/li