Appium切换webview后采坑记录
1、安卓端appium 切换webvivew
问题:使用switch_to.context()切换时总是提示版本不对应(报错如下)
selenium.common.exceptions.WebDriverException:Message:An unknown server-side error occurredwhileprocessing the command. Original error:No Chromedriverfoundthat can automate Chrome'74.0.3729'. See https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md formore details. You could alsotryto enable automated chromedrivers download server feature
原因:app内部集成的三方webvivew,查看app内部的webvivew版本是(69.0.3497.100),而手机原生webvivew是74.0.3729'版本
解决方法:需要下载与app内部集成webvivew版本相同的Chromedriver版本,且手机内置原生webvivew不超过app内部集成的webvivew版本
备注:如果app内使用的系统原生webvivew,则只需要按照报错中的版本下载对应的Chromedriver版本替换掉appium中的Chromedriver版本即可
2、Appium webview 下的 click () 事件无响应
问题:明明appium脚本显示pass,但实际没任何反应
原因:原来很多webview界面的元素监听的是tap事件,不是click事件。
解决方法:使用selenium的TouchActions里的tap事件,代码如下(可以自行封装后调用)
fromselenium.webdriver.common.touch_actionsimport TouchActions
el = driver.find_element_by_css_selector("")
TouchActions(driver).tap(el).perform()
3、定位到元素时无法点击
问题:定位到元素时点击报错提示
selenium.common.exceptions.WebDriverException:Message:An unknown server-side error occurredwhileprocessing the command. Original error:unknown error:Element isnotclickable at point (180,506). Other element would receive the click:
原因:页面元素已经加载完成,但是页面还未完全显示出来还在加载,点击不生效
解决方法:这个地方受网络波动影响,尤其是跨页面进行操作,建议保持网速稳定且使用sleep多设置几秒保证页面完全加载
4、页面内有此元素但是从其他页面跳转过来后提示未找到
问题:当前页面肯定有此元素但是从其他页面跳转至该页面后提示未找到此元素
原因:页面发生跳转时还未跳转成功,代码片段就已经执行,导致元素未找到
解决方法:设置元素等待
(1)隐式等待(推荐使用):在代码前部分加implicitly_wait() ,整个的程序运行过程中都会有效,都会等待元素加载完成,不需要像sleep一样每次要设置一遍。在设置的时间内没有加载到整个页面则会报NosuchElementError。
(2)sleep强制等待:不推荐使用,倘若你设置sleep等待时间设置太长,元素可能已经加载出来了,但是由于你设置过长,程序会一直等待你设置的时间过完才执行,这样会影响代码整体的运行效率。
(3)显示等待:WebDriverWait()未考虑使用