Appium 大神们,我做 H5 测试,切换到 webview 就是定位不到元素,求助大家给提供一个完整的代码

123456 · 2017年04月27日 · 最后由 xiaoqi_11 回复于 2017年05月03日 · 4119 次阅读



大神们,这是我写的两个代码,都报错找不到元素
没有 try......except 的那个代码会报错 Timeexception,求助大家,帮助一下我这个小菜鸟,真的不是伸手党,查了很多资料,还是没有搞懂

围观的朋友,奉献上你们的干货吧,大家一起解决这个问题,谢谢

共收到 32 条回复 时间 点赞
123456 新手学 appium-Appium 的三种等待时间设置方法 中提及了此贴 04月27日 13:36
2楼 已删除

用 xpath 定位呢

王乐新 回复

xpath,name,css,目前都试了,都试无法找到元素,大神,你可以具体的指导一下

123456 回复

建议不要随便用 “大神” 这样的称呼,社区里面对这个称呼欢迎度一般。

另外,你第二个截图里面,是先切换了 webview 再查找原生控件的,顺序错了。切换 webview 后只能找到 webview 里面的网页控件,无法找到原生控件了。

至于为何找不到元素,可以先在你查找元素前增加一个输出页面 xml 布局源码的函数查看布局情况(函数印象中是 driver.page_source ,建议你查下 api 文档),确认下是否布局里面就没有你这个元素。

陈恒捷 回复

你好,我刚才查了,有我想要的元素,还有我真正用的代码是
请您具体指导一下,我该怎么做呢,已经困扰一个星期了,真的很崩溃

123456 回复

把你 page_source 的输出贴上来?

陈恒捷 回复



你好,你看看,但是有一个特别神奇的情况发生,就是我把本地和 webview 换一下位置,就可以跑出来了,但是正常的顺序就会报刚才的错

陈恒捷 回复

你好,这是报的错误


真的想不出来,代码该怎么改才会识别那个元素了

你把你 pagesource 打印出来,这样才能确保你已经切换到对应 webview

123456 回复

不是这个,是你用脚本获取到的 page source ,不是浏览器界面或者 uiautomaterviewer 获取的。

陈恒捷 回复

他用的 python-client,就是 driver.page_source,
@friday 你就在查找元素前加一行代码
print self.driver.page_source,自己看下打印的页面元素

13楼 已删除
123456 #14 · 2017年04月28日 Author
steven 回复

你好,指的放在查找元素前是哪里呢?这是我放的位置,和打印出来的东西

麻烦,看一下,我需要怎么解决这个问题呢?

123456 回复

现在就在打印的里面搜索下 “神级仙医在都市”,就是你要根据 name 查找的那个元素,看有没有啊

123456 #16 · 2017年04月28日 Author
steven 回复


你好,我打印的里面就这些东西,什么元素也没有啊,不光没有神级仙医在都市,连男生,女生也没有,我是不是打印错了,如果就只有这些元素,我怎么定位我想定位的元素呢?就比如我要定位男生或者神级仙医在都市那本书

123456 #17 · 2017年04月28日 Author
陈恒捷 回复


你好,这是我打印出来的信息,里面确实没有 “神级仙医在都市” 连 “男生”“女生” 也没有,那么我怎么才能定位我想定位的元素呢,代码应该怎么改啊,麻烦具体指导一下

18楼 已删除
123456 #19 · 2017年04月28日 Author

@13楼的,你是怎么试的啊,可以把你的代码分享一下吗,谢谢

@friday 如果已经切换 H5 页面成功,通过 name 查找元素的话,试试 find_element_by_link_text 方法

123456 #21 · 2017年04月28日 Author
HengF丶 回复

我没有切换成功啊,所以,问题关键是怎么可以成功的切换到 webview,可以提供详细点的代码吗,谢谢

@friday 把你的 Appium 关于这一段的日子发出来.
首先,打印的的 contexts,看看是否能获取到 WEBVIEW_com.xx.xx, 能获取得到则

driver.switch_to.context(context.driver.contexts[1]),切换失败,看看日志

123456 #23 · 2017年04月28日 Author
HengF丶 回复


你好,你是怎么切换 webview 的呢?

我这么写的代码,

@friday 看你的 appium 日志,有多个 H5 页面,根据你要找的元素在哪个 webview 然后切换到对应的 webview

123456 #25 · 2017年04月28日 Author
HengF丶 回复

我只想想切换到精选页面,我需要怎么写代码呢?
麻烦具体的分享一下代码好吗,我试了很多种方法了,都跑不通,现在脑袋全是浆糊了,谢谢

@friday 神级仙医在都市,看你 h5 页面显示的连接件,WEBVIEW 应该是'WEBVIEW_com.sina.book',你把代码里面 driver.contexts[-1] 获取的 WEBVIEW 打印出来呗,不行就直接 driver.contexts['WEBVIEW_com.sina.book']

123456 #27 · 2017年04月28日 Author
HengF丶 回复


你说的那个方法,我试了,都是报错 NoSuchElementException: Message: no such element,我只想知道,我写的代码,切换到了 webview 吗,为什么一直找不到元素,大神你可以把具体的切换到 webview 代码分享一下吗,比如你之前是怎么切换的

123456 回复

😓 切没切换成功 你把 context 打印出来看看不就 OK 了吗.怎么切换的就是 switch_to_context 啊 .......................

123456 #29 · 2017年04月28日 Author
HengF丶 回复

我看日志了,没有切换成功,我也不知道原因在哪里了

123456 回复

1.desired_caps = {
'automationName': 'Uiautomator2', # 设置捕获 Android Toast 提示
'app': appLocation, # app 路径
'appPackage': appPackage, # app 包名
'deviceName': deviceName, # 设备名称
'udid': deviceId, # 设备唯一编号
'appActivity': launchActivity, # 应用启动 activity
'chromeOptions': {'androidProcess': appPackage},
'platformName': 'Android', # 应用平台名称
'platformVersion': deviceVersion, # 应用平台版本
'unicodeKeyboard': True, # 设置输入法能输入中文
'resetKeyboard': True,
'newCommandTimeout': 120, # Appium 超时时间设置
'noSign': True # 跳过检测和对应用进行 debug 签名的步骤,防止 app 签名被修改,导致更新不了应用
}里面加上'chromeOptions': {'androidProcess': appPackage},
2.查看你手机的 Android System WebView 的版本与你 Appium 里面的 chromedriver 的版本是否匹配 (/uploads/photo/2017/dd374f11-a8eb-4229-a24f-86cacc1d9dc7.png)
http://chromedriver.storage.googleapis.com/index.html

楼主遇到过切换 webview 卡死的情况吗?我现在在使用 switch_to_context 会卡死呢?

123456 #32 · 2017年05月02日 Author
xiaoqi_11 回复

没有啊,你那是什么样的情况,把你代码贴出来看看

匿名 #33 · 2017年05月02日

试下这个方法呢
driver.find_element_by_xpath(xxxxxxxxxx'精选').click()----------点开精选
print driver.current_context
driver.switch_to.context('xxxxxxxxx')

感觉就是 22 楼的方法

context 的()里是什么呀,坐标元素?

匿名 #2 · 2017年05月03日
123456 回复

具体看 print driver.current_context
打印出来的东西


有这样的错误日志。 有 webview,在执行 switch_to_context 的时候就这样了,楼主知道怎么解决吗

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册