Appium 微信小程序,driver.context ("WEBVIEW_com.tencent.mm:tools") 切换 webview 报错 Original error: session not created exception: please close '' and try again,各位大侠请问是怎么回事啊!

wangmcn · 2017年06月13日 · 最后由 汶二 回复于 2019年03月17日 · 7068 次阅读

请教各位大侠,我测微信小程序的时候,切换 webview 报错

基本设置:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);

当代码执行到这里就报错了:
driver.context("WEBVIEW_com.tencent.mm:tools");

控制台日志:
org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: session not created exception: please close '' and try again
(Driver info: chromedriver=2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9cf),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 4.98 seconds
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 17:00:58'
System info: host: 'YK-DZ-4711702', ip: '172.168.16.110', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_121'
Driver info: io.appium.java_client.android.AndroidDriver
Capabilities [{appPackage=com.tencent.mm, noReset=true, deviceName=05157df5a207d11f, fullReset=false, platform=LINUX, deviceUDID=05157df5a207d11f, desired={appPackage=com.tencent.mm, noReset=true, deviceName=05157df5a207d11f, fullReset=false, appActivity=.ui.LauncherUI, platformVersion=6.0.1, browserName=, fastReset=false, unicodeKeyboard=true, chromeOptions={args=[], extensions=[], androidProcess=com.tencent.mm:appbrand0}, udid=05157df5a207d11f, platformName=Android, resetKeyboard=true}, platformVersion=6.0.1, webStorageEnabled=false, takesScreenshot=true, browserName=, javascriptEnabled=true, unicodeKeyboard=true, udid=05157df5a207d11f, platformName=Android, deviceManufacturer=samsung, resetKeyboard=true, deviceScreenSize=1440x2560, networkConnectionEnabled=true, warnings={}, databaseEnabled=false, appActivity=.ui.LauncherUI, locationContextEnabled=false, deviceModel=SM-G9208, fastReset=false, chromeOptions={args=[], extensions=[], androidProcess=com.tencent.mm:appbrand0}}]
Session ID: a9c2ce80-0091-43d1-8c71-73ac8e955e02

appium 日志:
[Chromedriver] Error: session not created exception: please close '' and try aga
in
(Driver info: chromedriver=2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9
cf),platform=Windows NT 6.1.7601 SP1 x86_64)
at Chromedriver.callee$2$0$ (../../lib/chromedriver.js:176:15)
at tryCatch (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\
node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke as _invoke
at GeneratorFunctionPrototype.prototype.(anonymous function) as next
at GeneratorFunctionPrototype.invoke (C:\Users\Administrator\AppData\Roaming
\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:3
7)
Error: session not created exception: please close '' and try again
(Driver info: chromedriver=2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9
cf),platform=Windows NT 6.1.7601 SP1 x86_64)
at Chromedriver.callee$2$0$ (../../lib/chromedriver.js:176:15)
at tryCatch (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\
node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke as _invoke
at GeneratorFunctionPrototype.prototype.(anonymous function) as next
at GeneratorFunctionPrototype.invoke (C:\Users\Administrator\AppData\Roaming
\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:3
7)
[MJSONWP] Encountered internal error running command: Error: session not created
exception: please close '' and try again
(Driver info: chromedriver=2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9
cf),platform=Windows NT 6.1.7601 SP1 x86_64)
at Chromedriver.callee$2$0$ (../../lib/chromedriver.js:176:15)
at tryCatch (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\
node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke as _invoke
at GeneratorFunctionPrototype.prototype.(anonymous function) as next
at GeneratorFunctionPrototype.invoke (C:\Users\Administrator\AppData\Roaming
\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:3
7)
[HTTP] <-- POST /wd/hub/session/a9c2ce80-0091-43d1-8c71-73ac8e955e02/context 500
4980 ms - 357

请问是怎么回事呢?

共收到 48 条回复 时间 点赞

遇到同样的问题,之前还测试好好的,升级了一下微信和 appium 就这样了,降级也没救回来,感觉是微信那边调试工具的问题

—— 来自 TesterHome 官方 安卓客户端

Stepthen 回复

那你这个问题解决了吗?

遇到和你同样的问题,周日还是好好地,昨天 x5 内核升级到 43305 后就不行了。 我把 chromeDriver 也升级到了最新版本,然而并没有卵用。 降级也不行。 最恶心的是以前老版本内核的,几天只要进入过 debugx5.qq.com 的也会被升级到最新,导致我挂了好多台机器。楼主解决了的话回复我下哟,我找到解决方案了也会来告诉你一声的

weiqiliu 回复

请问你也是用的真机吧?我这是用的真机,也是上周好好的,周一来的时候就不行了,目前我用真机不行,之后我试了用模拟器倒是可以的,只不过不是进入 WEBVIEW_com.tencent.mm:tools 了

wangmcn 回复

嗯啊,对滴。我是用的真机。 目前我把一个老版本的 x5 内核导到微信里了,但是 debugx5.qq.com 进去后提示我还是没安装,但是在 tbs 检测工具里看到微信以为安装了 X5 内核了。 你有啥思路吗

wangmcn 回复

额,方便私聊吗?

weiqiliu 回复

这个我倒是没有试,周一我执行的时候就出现这个错误了,我以为是我上周运行 monkey 导致的,之后换了一台真机还是不行,又觉得是 PC 机器环境有问题,还重新装了系统,结果还是不行,之后算是放弃了,还是回到模拟器上了,目前看模拟器执行都正常,要是真机有解决办法我还是会切换回真机的,就等着谁有解决方案了

weiqiliu 回复

好,加我 Q 吧 85135506

Stepthen 回复

额,有关降级的问题可以咨询下你吗? 可以私聊下吗?这里回复有点慢

weiqiliu 回复

@weiqiliu ,我没有进行很深的研究,只是下载了一个旧版本的微信重装了,你可以尝试下载 老版本的 tbsSuite 试试

weiqiliu 回复

遇上了同样的问题。

刘晓光 回复

@skytraveler@happystone 额,昨天确认了下,貌似已经不能降级了。 即使安装了老版本的 TBS,进入调试页面的时候它会检测是否为最新然后自动更新到目前最新的版本。恩~降级的办法似乎走不通了。 你们目前找到了什么其它的解决方案吗

weiqiliu 回复

暂未找到解决方案,不知道内部的调用方式是怎样的,“chrome://inspect/#devices” 是可以读取到页面的,理论上 appium 应该也可以读取到的。不知道 chromedriver 端的日志是怎么查看的。

weiqiliu 回复

是的,上午填了下坑。x5 会热更新。太悲催了。 目前看是 chromedriver 连不上 session

log:
Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"args":[],"extensions":[],"androidProcess":"com.tencent.mm:tools","androidDeviceSerial":"e858310c"}}}

[debug] [JSONWP Proxy] Got response with status 200: {"sessionId":"820b6785ffe0d35cb300b63ac7415042","status":33,"value":{"message":"session not created exception: please close '' and try again\n (Driver info: chromedriver=2.26.436421 (6c1a3ab469ad86fd49c8d97ede4a6b96a49ca5f6),platform=Mac OS X 10.12.0 x86_64)"}}

手工启动 chrome driver
curl -X POST \
http://127.0.0.1:8000/wd/hub/session \
-H 'cache-control: no-cache' \
-H 'content-type: application/json' \
-H 'postman-token: a1129cab-e998-ec36-7e60-541186147e0a' \
-d '{
"desiredCapabilities": {
"chromeOptions": {
"androidPackage": "com.tencent.mm",
"androidUseRunningApp": true,
"androidProcess": "com.tencent.mm.plugin.webview.ui.tools.WebViewUI",
"androidDeviceSerial": "e858310c"
}
}
}'

得到的返回是这玩意儿:

"sessionId": "6ece983a80331d68d5b80e87b8e78e48",
"status": 33,
"value": {
"message": "session not created exception: please close '' and try again\n (Driver info: chromedriver=2.26.436421 (6c1a3ab469ad86fd49c8d97ede4a6b96a49ca5f6),platform=Mac OS X 10.12.0 x86_64)"
}
}

Chrome driver 的说明:

androidDeviceSerial: (Optional) The device serial number on which to launch the app (See Multiple Devices section below).
androidUseRunningApp: (Optional) Attach to an already-running app instead of launching the app with a clear data directory.
The following capabilities are only applicable to WebView apps.
androidActivity: Name of the Activity hosting the WebView.
androidProcess: (Optional) Process name of the Activity hosting the WebView (as given by ps). If not given, the process name is assumed to be the same as androidPackage.

手工打开 chromediver,并打日志的方法: 加上--verbose 就会把日志输出到控制台了。

/usr/local/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/mac/chromedriver --url-base=wd/hub --port=8000 --adb-port=5037 --verbose

如果单独启动我的日志会报这种错误
[6.839][DEBUG]: DevTools request: http://localhost:12088/json/version
[6.841][DEBUG]: DevTools request failed
[6.892][DEBUG]: DevTools request: http://localhost:12088/json/version
[6.894][DEBUG]: DevTools request failed
[6.944][DEBUG]: DevTools request: http://localhost:12088/json/version
[6.945][DEBUG]: DevTools request failed

又一个坑,这个玩得太少,得找个老鸟来搞啊。呼唤大神。

刘晓光 微信 webview 的自动化技术 中提及了此贴 06月15日 14:23

有解决这个问题的老哥吗?

刘晓光 回复

额,不知道是不是你手动启动 chrome driver 那写错了,你的回复里贴的是这个" "androidProcess": "com.tencent.mm.plugin.webview.ui.tools.WebViewUI" ", androidProcess 进程不应该是 com.tencent.mm:tools,"androidActivity"才应该是"com.tencent.mm.plugin.webview.ui.tools.WebViewUI"

刘晓光 回复

还有,我想问一下。 我用 java 想直接用 chromeDrive 启动手机上的 chrome,但是不能成功。 能帮我看看问题在哪吗

//运行代码
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("androidPackage", "com.android.chrome");
options.setExperimentalOption("androidDeviceSerial", "ZX1G228K2Q");
DesiredCapabilities capabilities=new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
try {
URL url=new URL("http://localhost:8000/wd/hub");
WebDriver driver = new RemoteWebDriver(url, capabilities);
driver.get("http://www.baidu.com");
String s=driver.getPageSource();
driver.quit();
} catch (MalformedURLException e) {
e.printStackTrace();
}

//本机启动 chromedriver
./chromedriver --url-base=wd/hub --port=8000 --adb-port=5037 --verbosew

weiqiliu 回复

那个跟启动没关系。是创建 session 的时候要输入的。你说的 process 我试了。也不行。

weiqiliu 回复

你这个不是用 appium 的客户端链接 appium 服务端么?只起 chromedriver 咋行。得把 appium 起来。

我也遇到了这个问题,我把 chromedriver 的版本从 2.26 替换到了 2.20,降级后就可以用了,我的 chromium 版本是 53

楼主解决了吗,我也遇到了这个问题

刘晓光 回复

恩~我只是想脱离 appium,利用 seleium 和 chromeDriver 单独调用下微信,看看 Log.本来 appium 也只是简单把他们封装在了里面。 对了,楼下有人找到了解决办法啦,把 chromeDriver 版本降低

cc 回复

哈哈哈,可行。 谢谢提醒,没想到啊没想到,我只把 chromeDriver 升级过试过,没想到降 chromeDriver 版本

cx 回复

21 楼

@vv00cc @weiqiliu 谢谢,问题解决了,我开始也降了 ChromeDriver,只降到了 24 就没有再降

cc 回复

可以了,降到 2.20,但是进入小程序后,从 app 切换到 webview 的时候要等一段时间,你们也是吗?

cx 回复

是只有 2.20 的才可以用吗?我之前也是只尝试降到 2.24,好坑啊,😂

weiqiliu 回复

我从 30 降到 24,都不行。没想到需要降到 20,感觉降到 20 会有别的 bug。一会儿试试。

刘晓光 回复

嗯啊,降下去的确有些问题,以前报错那个 post 有几率出现 500。

Stepthen 回复

是的,只有降到 20 才行😂

cx 回复

我觉得是 appium 调用 chromedriver 方式的问题。

cc 回复

神奇了, 我降级了也可以用了。。

补充一句, 再次进到 webview 页面, 还是有几率报错 session not created

我这里可以得到 session 了。不过无法操控元素。

刘晓光 回复

mac32 的试试呗

Stepthen 回复

已试,native 和 web 来回切换有问题。broken pip 老版本的驱动还是有问题。

Stepthen 回复

另外点击元素也有问题。

#37 楼 @skytraveler ,老的 chromedriver 确实是有很多 bug 和兼容性问题的,最好的办法还是找到高版本的原因,修改高版本的源码,得找高手来解决,😂

—— 来自 TesterHome 官方 安卓客户端

测试机微信给我自动升级了,很气,然后替换 chromedriver2.20 确实 ok,就是不知道稳不稳定

47楼 已删除
Stepthen 回复

想问下,目前你切换稳定么?

driver 为 20,用真机很不稳定

小星 回复

没在用,我只是玩一下,公司没在测微信,不过测混合 APP 时,用低版本 chromedriver 切换 webview 会很不稳定,有时候切换超时,有时候切换失败。

Stepthen 回复

目前就是这个问题。

大家有解决吗 ? 我降级了 出现了其他的问题

刘晓光 回复

我切换成功了,但无法操作元素,请问你解决了吗?

渐次消逝 回复

我也遇到此问题了,请问你解决没

我降到 2.20 都不行 还是报错

这边给出微信客户端自动化完整实现供参考,附上 Github 源码实现:微信公众号文章采集之:微信自动化

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