Appium [python+appium] 微信小程序测试,无法获取正确的 context

西湖醋鱼 · April 28, 2017 · Last by Senemail replied at November 08, 2018 · 1555 hits

环境:

nexus5,android6.0.1,微信 6.5.7,appium 版本 1.6.3,python 版本 3.5.2

看过之前思寒大神发的测试帖子,自己也想试试,遇到了几个问题,如下:

  1. 打开美团外卖小程序的首页后,通过 driver.contexts 获取不到 webview 的 context,打印出来只有 native_app,通过微信公众号打开某个链接也同样如此

  2. 按照思寒原帖中的 getContexthandles(),在 python 中直接报错,提示 webdriver 没有此方法

社区了找了不少帖子,大多数都是用 java 实现,问过写 java 的开发同事,getContexthandles() 在 java 中是有此方法,目前困惑的主要问题是,为什么连 webview 的 context 都获取不到,求指点

共收到 8 条回复 时间 点赞

日志都没有咋分析,Appium 日志贴出来

@hengfan
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.TextView[@text='发现']","context":"","multiple":false}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.TextView[@text='发现']","context":"","multiple":false}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: find
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Finding '//android.widget.TextView[@text='发现']' using 'XPATH' with the contextId: '' multiple: false
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Using: UiSelector[CLASS=android.widget.TextView, INSTANCE=2]
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":{"ELEMENT":"1"}}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.findElement() result: {"ELEMENT":"1"}
[HTTP] <-- POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element 200 438 ms - 87
[HTTP] --> POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element/1/click {"id":"1","sessionId":"7a8f2350-fb71-40d4-ad52-dcc20387aeb9"}
[debug] [MJSONWP] Calling AppiumDriver.click() with args: ["1","7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"element:click","params":{"elementId":"1"}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"1"}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: click
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":true}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.click() result: true
[HTTP] <-- POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element/1/click 200 1360 ms - 76
[HTTP] --> POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element {"using":"xpath","value":"//android.widget.TextView[@text='小程序']","sessionId":"7a8f2350-fb71-40d4-ad52-dcc20387aeb9"}
[debug] [MJSONWP] Calling AppiumDriver.findElement() with args: ["xpath","//android.widget.TextView[@text='小程序']","7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator
[debug] [BaseDriver] Waiting up to 0 ms for condition
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.TextView[@text='小程序']","context":"","multiple":false}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.TextView[@text='小程序']","context":"","multiple":false}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: find
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Finding '//android.widget.TextView[@text='小程序']' using 'XPATH' with the contextId: '' multiple: false
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Using: UiSelector[CLASS=android.widget.TextView, INSTANCE=12]
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":{"ELEMENT":"2"}}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.findElement() result: {"ELEMENT":"2"}
[HTTP] <-- POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element 200 211 ms - 87
[HTTP] --> POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element/2/click {"id":"2","sessionId":"7a8f2350-fb71-40d4-ad52-dcc20387aeb9"}
[debug] [MJSONWP] Calling AppiumDriver.click() with args: ["2","7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"element:click","params":{"elementId":"2"}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"2"}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: click
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":true}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.click() result: true
[HTTP] <-- POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element/2/click 200 154 ms - 76
[HTTP] --> POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element {"using":"xpath","value":"//android.widget.TextView[@text='美团外卖 +']","sessionId":"7a8f2350-fb71-40d4-ad52-dcc20387aeb9"}
[debug] [MJSONWP] Calling AppiumDriver.findElement() with args: ["xpath","//android.widget.TextView[@text='美团外卖 +']","7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator
[debug] [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator
[debug] [BaseDriver] Waiting up to 0 ms for condition
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.TextView[@text='美团外卖 +']","context":"","multiple":false}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.TextView[@text='美团外卖 +']","context":"","multiple":false}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: find
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Finding '//android.widget.TextView[@text='美团外卖 +']' using 'XPATH' with the contextId: '' multiple: false
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Using: UiSelector[CLASS=android.widget.TextView, INSTANCE=2]
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":{"ELEMENT":"3"}}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.findElement() result: {"ELEMENT":"3"}
[HTTP] <-- POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element 200 296 ms - 87
[HTTP] --> POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element/3/click {"id":"3","sessionId":"7a8f2350-fb71-40d4-ad52-dcc20387aeb9"}
[debug] [MJSONWP] Calling AppiumDriver.click() with args: ["3","7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"element:click","params":{"elementId":"3"}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"3"}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: click
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":true}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.click() result: true
[HTTP] <-- POST /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/element/3/click 200 1042 ms - 76
[HTTP] --> GET /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/contexts {}
[debug] [MJSONWP] Calling AppiumDriver.getContexts() with args: ["7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [AndroidDriver] Getting a list of available webviews
[debug] [ADB] Getting connected devices...
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running 'D:\sdk\platform-tools\adb.exe' with args: ["-P",5037,"-s","042ade60252397ad","shell","cat","/proc/net/unix"]
[debug] [AndroidDriver] Found webviews: []
[debug] [AndroidDriver] Available contexts: ["NATIVE_APP"]
[debug] [MJSONWP] Responding to client with driver.getContexts() result: ["NATIVE_APP"]
[HTTP] <-- GET /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9/contexts 200 134 ms - 86
[HTTP] --> DELETE /wd/hub/session/7a8f2350-fb71-40d4-ad52-dcc20387aeb9 {}
[debug] [MJSONWP] Calling AppiumDriver.deleteSession() with args: ["7a8f2350-fb71-40d4-ad52-dcc20387aeb9"]
[debug] [AndroidDriver] Shutting down Android driver

Author only

楼主解决了吗?

Cvbnx 回复

driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0')

楼主,这个是怎么解决的..目前我们也遇到这个难题。

是否需要开发的协助,加入如下代码实现
this.appView.setWebContentsDebuggingEnabled(true);

请问楼主怎么解决的啊,我问开发,我们应用上面有一个 banner 轮播,banner 点进去是一个 h5 页面,但是这几个 banner 共用一个 webview,导致点进 h5 页面,定位不到页面里面的元素

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up