Appium 有谁解决,微信公众号/ 小程序,切换 webview 一直处于缓冲状态问题 过个 1-2 分钟后 session 报错

http · 2017年01月13日 · 最后由 TesterWa 回复于 2023年01月29日 · 3675 次阅读
print self.driver.contexts:
[u'NATIVE_APP', u'WEBVIEW_undefined', u'WEBVIEW_com.android.browser', u'WEBVIEW_com.android.quicksearchbox']

备注:我不知道为什么有时候会 print 出 u'WEBVIEW_undefined

aaa='WEBVIEW_com.tencent.mm:tools'
self.driver.switch_to.context(aaa)
sleep(5)
self.driver.find_element_by_class_name('search_item_inner').click()

具体操作就是这样的,有时候切 webview 就直接报错,有时候切进 webview 的时候 一直处于缓冲状态! 报错 chrome not reachable

appium 代码报错如下

error: Chromedriver: Chromedriver exited unexpectedly with code null, signal SIGTERM
info: Chromedriver: Changed state to 'stopped'
error: Chromedriver: Error: An error occurred (Original error: chrome not reachable
(Driver info: chromedriver=2.18.343837
warn: Chromedriver for context WEBVIEW_com.tencent.mm:tools stopped unexpectedly
warn: Chromedriver quit unexpectedly, but it wasn't the active context, ignoring

环境是:

  • appium1.4.16
  • chromedriver:2.25
  • mac
  • 安卓:6.0.1
  • python

求大神请教阿

共收到 32 条回复 时间 点赞

下载最新的 chromedriver 试一下 好像 2.27 了都

要你们排个版真是太难了

我跟楼主遇到一样的问题,后来设置一下配置信息解决了。https://testerhome.com/topics/7097

@TheRoadNotTaken Taken 你好 这个配置信息我已经加了还是老样子 能加下好友么 我的 QQ: 3351829108

http #5 · 2017年01月15日 Author

@cynic 切换 webview 的问题解决了 现在就是 操作 webview 里面的元素 click 报错... 不知道啥情况...

#5 楼 @zhangjunjie 小程序里的元素我也找不到 有的公众号页面元素我用 xpath 可以定位到进行操作,但是不是每个都可以 不知道什么原因

我切换成功
[debug] [JSONWP Proxy] Proxying [GET /status] to [GET http://127.0.0.1:8000/wd/hub/status] with no b
ody
[debug] [JSONWP Proxy] Got response with status 200: "{\"sessionId\":\"\",\"status\":0,\"value\":{\"
build\":{\"version\":\"alpha\"},\"os\":{\"arch\":\"x86_64\",\"name\":\"Windows NT\",\"version\":\"6.
1.7601 SP1\"}}}"
[debug] [JSONWP Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with
body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningA
pp":true,"args":[],"androidProcess":"com.tencent.mm:appbrand0","extensions":[],"androidDeviceSerial"
:"ZX1G4294SH"}}}
[debug] [JSONWP Proxy] Got response with status 200: {"sessionId":"83a43f95f4d58aaa08c13278d617eb15"
,"status":0,"value":{"acceptSslCerts":true,"applicationCacheEnabled":false,"browserConnectionEnabled
":false,"browserName":"chrome","chrome":{"chromedriverVersion":"2.26.436362 (5476ec6bf7ccbada1734a0c
dec7d570bb042aa30)"},"cssSelectorsEnabled":true,"databaseEnabled":false,"handlesAlerts":true,"hasTou
chScreen":false,"javascriptEnabled":true,"locationContextEnabled":true,"mobileEmulationEnabled":fals
e,"nativeEvents":true,"pageLoadStrategy":"normal","platform":"ANDROID","rotatable":false,"takesHeapS
napshot":true,"takesScreenshot":true,"unexpectedAlertBehaviour":"","version":"37.0.0.0","webStorageE
nabled":true}}
[debug] [Chromedriver] Changed state to 'online'
[debug] [MJSONWP] Responding to client with driver.setContext() result: null
[HTTP] <-- POST /wd/hub/session/9a81663a-b01d-4846-90e0-779e160c4644/context 200 5078 ms - 76、

但是找元素时候提示这个

[debug] [JSONWP Proxy] Got response with status 200: {"sessionId":"83a43f95f4d58aaa08c13278d617eb15"
,"status":7,"value":{"message":"no such element: Unable to locate element: {\"method\":\"xpath\",\"s
elector\":\"//*[text()='机票']\"}\n (Session info: webview=37.0.0.0)\n (Driver info: chromedriver=
2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64)"}}

@utopia 我也是已经进入到 webview 了 但是执行里面的 click 就报错 跟你差不多的报错 跟楼主一模一样 ,有解决的好心人能告诉下解决方法吗


谁用 python 点击微信小程序里的 美团外卖->美食 成功的? click 成功的?

小程序的 androidProcess 不是 WEBVIEW_com.tencent.mm:tools ,要设置对应的 com.tencent.mm:appbrand0 com.tencent.mm:appbrand1 等,和每次打开小程序的循序有关,再切换上下文,提示 [debug] [Chromedriver] Changed state to 'online' 才真的进入的 WEBVIEW。

但是我找元素时候报错了

[debug] [JSONWP Proxy] Got response with status 200: {"sessionId":"83a43f95f4d58aaa08c13278d617eb15"
,"status":7,"value":{"message":"no such element: Unable to locate element: {\"method\":\"xpath\",\"s
elector\":\"//*[text()='机票']\"}\n (Session info: webview=37.0.0.0)\n (Driver info: chromedriver=
2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64)"}}

@utopia androidProcess 是填写 com.tencent.mm:appbrand0 -1

但是切换 webview 的时候是: self.driver.switch_to.context->'WEBVIEW_com.tencent.mm:tools'

还是: self.driver.switch_to.context->‘com.tencent.mm:appbrand0-2‘ ?
我看@seveniruby 发的帖子 他 androidProcess 填的是 com.tencent.mm:appbrand0 但是切换 webview 写的是 self.driver.switch_to.context(‘WEBVIEW_com.tencent.mm:tools’)
还有他的 xpath 路径 我感觉有问题 运行就报错 ....
具体操作:微信->发现->小程序->搜索美团外卖->点击进入->转 webview->然后实行 点击 click ‘美食’! 直接报错
这是他的 xpath click:
driver.findElementByXPath("//[contains(@url, '美食')]").click()
driver.findElementByXPath("//
[contains(., '金百万')]").click()

http #21 · 2017年01月16日 Author

@xiaoxuxu @utopia 我跟你们一样 现在 web view 是进去了,就是操作元素报错。。复制的也是 seveniruby 的 path 路径报错
后来我直接用 chrome inspect

复制出来的 xpath 是这样的:/html/body/wx-view/wx-view[2]/wx-view[3]/wx-view[1]/wx-view/wx-navigator[1]
知道问题的帮忙解决一下吧

#11 楼 @xiaoxuxu 注意格式,应该是 self.driver.switch_to.context->‘WEBVIEW_com.tencent.mm:appbrand0‘

#12 楼 @zhangjunjie
原因大概是 getsource 看到 body 是空的😂 😂 😂 ,所以 xpath 什么也找不到,你这种方式是无效的


http #14 · 2017年01月16日 Author

@utopia 刚刚我也证实了 谷歌的 inspect 不能用来定位微信小程序 因为 get source 完全与谷歌定位到的 xpath 路径不一样 不知道 seveniruby 怎么做到的..感觉好像用了什么工具 devtool ? app 混合型的 webview 好像是能实现的

@zhangjunjie ,我和你一样:测试公众号是没问题的,但是小程序定位不到控件。据说腾讯自家的测试工具 xtest 可以测试小程序 ,可以研究下

@hukui51770 xtest 是记录点击页面的位置,然后回放,用例是这样的

sleep(1000)
clickpx(0.2517,0.9344, clicktime, TimeMarker(CaseN))
--null
sleep(1000)
clickpx(0.6285,0.5458, clicktime, TimeMarker(CaseN))

我用的是 nexus 6 android 7.0 xtest 还没适配,低版本是好的,可以定位小程序的 控件

tap(-2, 'WX-VIEW', '搜 索', '@0%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.LinearLayout%2:android.widget.FrameLayout%1:android.widget.LinearLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.FrameLayout%1:android.widget.AbsoluteLayout//BODY/WX-VIEW[1]/WX-VIEW[1]/WX-VIEW[2]/WX-VIEW[1]/WX-VIEW[6]/WX-VIEW[1]|70',0.4323,0.6288, 20, TimeMarker(CaseN), 'com.tencent.mm.plugin.appbrand.ui.AppBrandUI')

@hukui51770 @utopia 可以用 Macaca 好像可以测微信小程序!

@xiaoxuxu 小程序的控件怎么定位

http #19 · 2017年01月18日 Author

@TheRoadNotTaken 微信小程序的元素 我 click 稍微动了一下 但是没有点击进入? 知道什么情况吗
还有就是 switch_to 公众号界面 10 次成功 2 次...大几率切换失败
公众号界面打开的第二个公众号界面 操作好像又卡住了 session 2 分钟后报错 print source 显示 None?
有谁知道吗

匿名 #21 · 2017年03月17日

正如楼上几位提到的,腾讯 XTest 支持小程序自动化测试哈。而且已经支持 7.0 手机啦。

请问下 Xtest 下载链接失效?

http 回复

发现了同样的问题,切换至小程序 webview 后,driver.page_source 得到的源码和 chrome://inspect/#device 打开的源码不一样。所以一直定位不到小程序的 webview 元素。请问你现在解决了吗?

listtap 回复

所以 appium 测试微信小程序是行不通了,得换 macaca 了吗😂

独行数息 回复

而且 Xtest 好像下线了,现在有什么解决方案吗?

http 回复

你好,我也遇到同样的问题了,请问你解决没

listtap 回复

你好,我也遇到同样的问题了

Baozhida 回复

你好,我现在拿到的 body 也是空的,并且句柄只有 1 个,切换不了

笑哼 回复

你好,我看到您最近小程序测试成功了,我现在源码里 body 也是空的,这个问题您是怎么解决的呢?

请问楼主解决了吗

我切换到小程序的 webview 后,切换成功,打印出来的源码跟 chrome 上显示的小程序源码一点也不一样,路径什么的都不一样,是不是就像楼主说的,不能使用 chrome 来查看小程序的源码,那要用什么其他的方法吗

回复内容未通过审核,暂不显示
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册