Appium Appium webview 下 click () 事件无响应

joey · 2015年03月27日 · 最后由 赵力新 回复于 2017年01月04日 · 2745 次阅读

各位大神们,本人刚刚入门自学移动端自动化测试,一路上遇到不少问题,在各种翻 testerHome 老帖 +google+ 百度下终于搭好 Appium 整套环境并把 contact.apk 的案例运行起来了,不过在尝试实施到项目的 app 上时又遇到问题,目前卡在如标题所诉的这个问题没法继续了。

测试环境和应用介绍一下:

  1. 安卓模拟器 V4.4.2(API level 19)
  2. Appium1.3.4
  3. Selenium2.45.0
  4. 测试应用为 senchTouch 开发的 web APP

现在的情况是可以切换到 webview 下,sendKey 事件也能正常操作,根据 Appium 的 log 看到应该通过 xpath 正常找到了页面上的元素,并发送了 click 事件请求,但是应用上无响应。google 看到两篇帖子也有人遇到过类似问题,有两种解决方案。

  1. 切回 Native context 采用定位 button 坐标并点击的方式 https://github.com/appium/appium/issues/2816
  2. 如果原因是 JS function 不能用 webdriver 的话,采用执行 js 脚本的方式 https://github.com/appium/appium/issues/3246

跟开发确认过我们的确所有的点击事件都是调用 js function,但是用上述方法 2 仍然不工作。现象跟之前直接 click 一样。但是方法 1 实在不是个好的做法,会引入好多恶心代码,所以不想尝试。

以下是我的脚本内容,望大神指点, 跪谢~~~

Python

driver.switch_to.context('WEBVIEW')

driver.find_element_by_xpath("//input[@type='text']").send_keys("XXX")
driver.find_element_by_xpath("//input[@type='password']").send_keys("XXX54321")
time.sleep(10)
#driver.find_element_by_xpath("//span[text()='登录']").click()  #直接点击方案
driver.execute_script("window.document.getElementsByClassName('logon-button-label')[0].click()");  #执行JS脚本方案

相关的 log 如下:

info: <-- POST /wd/hub/session/bef5ca0d-bfeb-4b25-ac55-04fc274f72d4/element/0.69
25914944149554-2/value 200 8649.908 ms - 72
info: --> POST /wd/hub/session/bef5ca0d-bfeb-4b25-ac55-04fc274f72d4/execute {"se
ssionId":"bef5ca0d-bfeb-4b25-ac55-04fc274f72d4","args":[],"script":"window.docum
ent.getElementsByClassName('logon-button-label')[0].click()"}
info: [debug] Proxying command to 127.0.0.1:9515
info: [debug] Making http request with opts: {"url":"http://127.0.0.1:9515/wd/hu
b/session/4cb6e549b749aaa3a7e0bdb0e5e3a3d8/execute","method":"POST","json":{"ses
sionId":"bef5ca0d-bfeb-4b25-ac55-04fc274f72d4","args":[],"script":"window.docume
nt.getElementsByClassName('logon-button-label')[0].click()"}}
info: [debug] Proxied response received with status 200: {"sessionId":"4cb6e549b
749aaa3a7e0bdb0e5e3a3d8","status":0,"value":null}
共收到 7 条回复 时间 点赞

提交回复
Ctrl+Enter
代码请贴代码并使用代码块!
日志请贴日志并使用代码块!
提问,指明问题信息,请像一个职业测试一样报问题
支持 Markdown 格式, 粗体删除线单行代码
支持表情,见 Emoji cheat sheet
按 “M” 键查看更多 帮助。

joey #2 · 2015年03月27日 Author

#1 楼 @monkey 多谢提醒,解决问题心切,都没来得及仔细研读发帖规则~~~

info: [debug] Proxied response received with status 200: {"sessionId":"4cb6e549b
749aaa3a7e0bdb0e5e3a3d8","status":0,"value":null}

已经到 selendroid 了。 可惜,js 执行返回结果 null。

怎么样,研究得有结果吗~

joey #5 · 2015年03月30日 Author

#4 楼 @anikikun 还是没解决,楼上提到的返回结果为 null 的原因还没找到,暂时只能用坐标的方式定位了。。。

你好 请问现在有结果了吗?我也遇到和你相同的情况,用方法 2 获取返回值是 null,在线等。。。

我也遇到相同的问题了,和前端交流了一下,我们的情况是,对于有 data-href 属性的标签,监听类型是 tap,所以用 click 是无法操作的;对于除了 data-href 的其他 dom 元素,可以用 click。

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