alibaba / alibaba/macaca

微信公众号切换第二次切换webview之后定位元素失败

Open
#804 0 comments 0 reactions 0 assignees View on GitHub
help wanted
Dominant language
No language data
Stars
3.2k
Forks
418
PR merge metrics
No merged PRs in 30d

Description

* **问题描述**:
进入微信公众号之后切换webview,并点击元素跳转到下一个页面,再次切换webview并点击页面元素的时候提示Argument was an invalid selector
* **Macaca Version**:
2.1.2
* **代码**:
public class Test4 {

BaseMacacaClient driver = new BaseMacacaClient();

@BeforeMethod
public void setUp() throws Exception {
JSONObject porps = new JSONObject();
porps.put("autoAcceptAlerts", true);
porps.put("platformName", Config.ADR_PLATFORM_NAME);
porps.put("udid", "192.168.100.117:15361");
porps.put("deviceName", "STF");
driver.setCurPlatform(PlatformType.ANDROID);
porps.put("reuse", Config.REUSE);
porps.put("package", "com.tencent.mm");
porps.put("activity", "com.tencent.mm.ui.LauncherUI");
// 关键是加上这段
porps.put("androidProcess", "com.tencent.mm:tools");

JSONObject desiredCapabilities = new JSONObject();
desiredCapabilities.put("desiredCapabilities", porps);
driver.initDriver(desiredCapabilities);
}

@Test
public void test_case_1() throws Exception {

driver.sleep(2000);
driver.elementByName("内部运营001").click();
driver.elementByName("我的服务").click();
driver.elementByName("个人主页").click();
Thread.sleep(5000);
// driver.switchFromNativeToWebView();
System.out.println(driver.contexts);
switchToWebView(driver);
Thread.sleep(2000);
System.out.println("=========================="+driver.currentContext());
driver.elementByName("全部").click();
Thread.sleep(2000);
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+driver.currentContext());
driver.switchFromeWebviewToNative();
Thread.sleep(2000);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"+driver.currentContext());
switchToWebView(driver);
Thread.sleep(2000);
System.out.println("###############################"+driver.currentContext());
driver.elementByName("已订业务").click();
}



public static MacacaClient switchToWebView(MacacaClient driver) throws Exception {
JSONArray contexts = driver.contexts();
return driver.context(contexts.get(contexts.size() - 1).toString());
}

@AfterMethod
public void tearDown() throws Exception {

Thread.sleep(5000);
driver.quit();
}

}

* **日志**:
>> UIAutomatorWD http server ready
>> macaca-android.js:303:10 [master] pid:12776 start app with: {"package":"com.tencent.mm","activity":"","androidProcess":"com.tencent.mm:tools"}
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:39:57]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":"{\"reuse\":\"3\",\"package\":\"com.tencent.mm\",\"activity\":\"com.tencent.mm.ui.LauncherUI\",\"androidProcess\":\"com.tencent.mm:tools\",\"platformName\":\"Android\",\"udid\":\"192.168.100.117:15361\",\"deviceName\":\"STF\",\"autoAcceptAlerts\":true}"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:39:59]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element, jsonBody: {"using":"name","value":"内部运营001"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":null}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element:POST with body: {"using":"name","value":"内部运营001"}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:00]: {"status":0,"value":"{\"ELEMENT\":\"1\"}","sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:00]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click, jsonBody: {}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element/1/click:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:01]: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:01]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element, jsonBody: {"using":"name","value":"我的服务"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element:POST with body: {"using":"name","value":"我的服务"}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:03]: {"status":0,"value":"{\"ELEMENT\":\"1\"}","sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:03]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click, jsonBody: {}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element/1/click:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:04]: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:04]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element, jsonBody: {"using":"name","value":"个人主页"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element:POST with body: {"using":"name","value":"个人主页"}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:05]: {"status":0,"value":"{\"ELEMENT\":\"1\"}","sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:05]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click, jsonBody: {}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element/1/click:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:06]: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:11]: method: GET url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/contexts, jsonBody: {}
Could not get the webview version!
>> No webview version found from adb shell!
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:12]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":"[\"NATIVE_APP\"]"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:12]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/context, jsonBody: {"name":"NATIVE_APP"}
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:12]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":null}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:14]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element, jsonBody: {"using":"name","value":"全部"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":13,"value":"An unknown server-side error occurred while processing the command.","sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element:POST with body: {"using":"name","value":"全部"}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:15]: {"status":0,"value":"{\"ELEMENT\":\"1\"}","sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:15]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click, jsonBody: {}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":13,"value":"An unknown server-side error occurred while processing the command.","sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element/1/click:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element/1/click:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:16]: {"status":0,"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:18]: method: GET url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/contexts, jsonBody: {}
Could not get the webview version!
>> No webview version found from adb shell!
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:19]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":"[\"NATIVE_APP\"]"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:19]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/context, jsonBody: {"name":"NATIVE_APP"}
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:19]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":null}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:21]: method: GET url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/contexts, jsonBody: {}
Could not get the webview version!
>> No webview version found from adb shell!
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:22]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":"[\"NATIVE_APP\"]"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:22]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/context, jsonBody: {"name":"NATIVE_APP"}
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:22]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0,"value":null}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:24]: method: POST url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element, jsonBody: {"using":"name","value":"已订业务"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/:sessionId/accept_alert:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/accept_alert:POST with body: {}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":0,"sessionId":":sessionId"}
>> proxy.js:55:14 [master] pid:12776 Proxy: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87/element:POST to http://127.0.0.1:9009/wd/hub/session/:sessionId/element:POST with body: {"using":"name","value":"已订业务"}
>> proxy.js:85:20 [master] pid:12776 Got response with status 200: {"status":32,"value":"Argument was an invalid selector (e.g. XPath/CSS).","sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> session.js:120:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:26]: {"status":32,"value":"\"Argument was an invalid selector (e.g. XPath/CSS).\"","sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87"}
>> responseHandler.js:11:12 [master] pid:12776 Recieve HTTP Request from Client[2018-03-30 10:40:31]: method: DELETE url: /wd/hub/session/de53ed02-6892-4746-9b17-7b94547c0c87, jsonBody: {}
>> session.js:91:12 [master] pid:12776 Delete session, sessionId: de53ed02-6892-4746-9b17-7b94547c0c87
>> responseHandler.js:49:14 [master] pid:12776 Send HTTP Respone to Client[2018-03-30 10:40:31]: {"sessionId":"de53ed02-6892-4746-9b17-7b94547c0c87","status":0}

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the Java reproduction around switchToWebView, switchFromeWebviewToNative, contexts, and the second elementByName call. Trace the contexts response and selector requests through macaca-android.js:303:10, proxy.js, responseHandler.js, and session.js. Done means the reproduced second WebView switch can locate and click 已订业务 without the selector error.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, java, javascript
Domain
mobile-dev, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.