各位大神们,本人刚刚入门自学移动端自动化测试,一路上遇到不少问题,在各种翻 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}


↙↙↙阅读原文可查看相关链接,并与作者交流