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

wangmcn · 2017年06月13日 · 最后由 xiaohengdada 回复于 2018年05月15日 · 806 次阅读

请教各位大侠,我测微信小程序的时候,切换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

请问是怎么回事呢?

共收到 46 条回复 时间 点赞

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

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

happystone 回复

那你这个问题解决了吗?

遇到和你同样的问题,周日还是好好地,昨天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

happystone 回复

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

weiqiliu 回复

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

weiqiliu 回复

遇上了同样的问题。

skytraveler 回复

@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

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

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

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

skytraveler 回复

额,不知道是不是你手动启动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"

skytraveler 回复

还有,我想问一下。 我用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

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

skytraveler 回复

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

vv00cc 回复

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

chenxin 回复

21楼

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

vv00cc 回复

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

chenxin 回复

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

weiqiliu 回复

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

skytraveler 回复

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

happystone 回复

是的,只有降到20才行😂

chenxin 回复

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

vv00cc 回复

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

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

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

skytraveler 回复

mac32的试试呗

happystone 回复

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

happystone 回复

另外点击元素也有问题。

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

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

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

41楼 已删除
happystone 回复

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

driver为20,用真机很不稳定

cchenlll 回复

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

happystone 回复

目前就是这个问题。

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

skytraveler 回复

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

xiaoMGitHub 回复

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

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