Appium 微信 webview 的自动化技术

seveniruby · 发布于 2016年12月30日 · 最后由 codeskyblue 回复于 2017年1月23日 · 3791 次阅读
本帖已被设为精华帖!

最近好多人问微信webview自动化的事情, 碰巧我也在追微信webview的自动化和性能分析方法.
先发出来一点我的进展给大家参考下. 此方法用于android平台, iOS请自行解决

微信的设置

用微信打开debugx5.qq.com, 这是个微信的x5内核调试页面. 你可以在任何聊天窗口内输入这个网址. 并打开它.
勾选"是否打开TBS内核Inspector调试功能"

使用ChromeDriver编写测试用例

首先安装ChromeDriver
从官方下载或者从你的appium的安装路径里面找chromedriver. 在appium的执行日志里面其实也会打印chromedriver的路径的
然后在电脑上启动它, 设置好端口

chromedriver --url-base=wd/hub --port=8000

可以使用selenium或者appium的客户端去编写测试用例.
如下是我的scalatest的测试用例. 大家可以自己用其他的语言实现

test("test chromedriver weixin") {
  val options = new ChromeOptions()
  options.setExperimentalOption("androidPackage", "com.tencent.mm")
  options.setExperimentalOption("androidUseRunningApp", true)
  options.setExperimentalOption("androidActivity", ".plugin.webview.ui.tools.WebViewUI")
  options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
  val capability = DesiredCapabilities.chrome()
  capability.setCapability(ChromeOptions.CAPABILITY, options)
  val url = "http://127.0.0.1:8000/wd/hub"
  val driver = new AndroidDriver[WebElement](new URL(url), capability)
  driver.get("https://testerhome.com/topics/6954")
  println(driver.getPageSource)
  driver.quit()
}

使用appium编写测试用例

有人会经常问为什么android上appium不能自动化微信webview, 其实是可以的. 主要是目前的appium有个bug导致的.
在appium中context的切换时, 没有带上一个关键的androidProcess配置导致的.
他会导致appium识别webview的时候, 把com.tencent.mm:tools的webview识别成com.tencent.mm的webview. 从而导致context切换失败.

正确的用appium测试微信h5的方法如下

test("test weixin h5") {
  val capability = new DesiredCapabilities()
  capability.setCapability("app", "")
  capability.setCapability("appPackage", "com.tencent.mm")
  capability.setCapability("appActivity", ".ui.LauncherUI")
  capability.setCapability("deviceName", "emulator-5554")
  capability.setCapability("fastReset", "false")
  capability.setCapability("fullReset", "false")
  capability.setCapability("noReset", "true")
  //capability.setCapability("unicodeKeyboard", "true")
  //capability.setCapability("resetKeyboard", "true")

  //关键是加上这段
  val options = new ChromeOptions()
  options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
  capability.setCapability(ChromeOptions.CAPABILITY, options)

  val url = "http://127.0.0.1:4723/wd/hub"
  val driver = new AndroidDriver[WebElement](new URL(url), capability)
  println(driver.getPageSource)
  driver.findElementByXPath("//*[@text='我']").click
  driver.findElementByXPath("//*[@text='收藏']").click
  driver.findElementByXPath("//*[contains(@text, '美团外卖')]").click
  println(driver.getPageSource)
  println(driver.getContextHandles)
  driver.context("WEBVIEW_com.tencent.mm:tools")
  println(driver.getPageSource)
}

最关键的就是这句

val options = new ChromeOptions()
options.setExperimentalOption("androidProcess", "com.tencent.mm:tools")
capability.setCapability(ChromeOptions.CAPABILITY, options)

后记

之前测试加上ChromeOptions配置的时候没有成功, 我以为是appium不支持ChromeOptions, 就给appium-android-driver提交了一个PR
后来jlipps提醒了我一下

我就又追查了几遍, 最后发现是我本地安装appium时候加上的http_proxy环境变量干扰了ChromeDriver的执行.
Appium其实是支持ChromeOptions的

结论也就是现在的Appium其实是可以完美的做微信自动化的

我在想我是不是国内第一个提供微信webview自动化方法的人 😅
借鉴此思路的同学转发请注明原链. https://testerhome.com/topics/6954

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 53 条回复
1楼 已删除
605 chenhengjie123 将本帖设为了精华贴 12月30日 22:19
605
chenhengjie123 · #3 · 2016年12月30日

加精理由:简单实用,解决了很多人难以对微信 webview 自动化的问题。

3623
026 · #4 · 2016年12月31日

很棒

110
Lihuazhang · #5 · 2016年12月31日

👍

3049
ike · #6 · 2017年1月01日

新年第一个赞给你

6822
wuhao · #7 · 2017年1月01日

意思是还不能用appium server去做android webview的测试吧?

104
seveniruby · #8 · 2017年1月01日

#7楼 @wuhao 快了. 我的补丁合并过去就能用appium测试了

4365
neyo · #9 · 2017年1月03日

👍 赞,学习了

10660
kelequy · #10 · 2017年1月04日

棒棒哒,解决大问题。

214
oscar · #11 · 2017年1月05日

赞,问一下思寒,结论是appium支持ANDROID的webview自动化吗?目前版本还不支持吧

110
Lihuazhang · #12 · 2017年1月05日

#11楼 @oscar webview一直支持

5920
yanzilove · #13 · 2017年1月05日

尝试了这个方法,但是一直提示org.openqa.selenium.WebDriverException: Not yet implemented

详细日志
org.openqa.selenium.WebDriverException: Not yet implemented. Please help us: http://appium.io/get-involved.html (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 37 milliseconds
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'BY-01-0734', ip: '172.20.133.17', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_101'
Driver info: io.appium.java_client.android.AndroidDriver
Capabilities [{appPackage=com.tencent.mm, networkConnectionEnabled=true, noReset=true, warnings={}, databaseEnabled=false, deviceName=7N2RDQ1484001994, fullReset=false, platform=ANDROID, appActivity=.ui.LauncherUI, desired={appPackage=com.tencent.mm, appActivity=.ui.LauncherUI, noReset=true, newCommandTimeout=600, platformVersion=4.4, fastReset=false, autoWebview=true, chromeOptions={args=[], extensions=[], androidProcess=com.tencent.mm:tools}, platformName=Android, deviceName=Android Emulator, fullReset=false, platform=ANDROID}, newCommandTimeout=600, platformVersion=4.4.2, webStorageEnabled=false, locationContextEnabled=false, browserName=Android, takesScreenshot=true, javascriptEnabled=true, fastReset=false, autoWebview=true, chromeOptions={args=[], extensions=[], androidProcess=com.tencent.mm:tools}, platformName=Android}]
Session ID: 99db07db-1d87-4c45-ba8e-3d63a95d6c94
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:40)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:316)
at com.boyaa.test.startAppium(test.java:40)
at com.boyaa.test.main(test.java:77)

1317
adfghzhang · #14 · 2017年1月06日

已实验,完美支持,下面这段最关键。

// 关键是加上这段
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("androidProcess", "com.tencent.mm:tools");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
13790
hukui51770 · #15 · 2017年1月09日

@yanzilove ,我和你一样 的问题,解决了吗?

96
kgdtkggfqp · #16 · 2017年1月09日

有用python的吗,想了半天,还是不知道怎么做

96
balaroth · #17 · 2017年1月09日

你好,driver切换到webview失败,appium日志如下,请问如何解决

> info: [debug] Available contexts: NATIVE_APP,WEBVIEW_com.tencent.mm:tools
> info: [debug] Connecting to chrome-backed webview
> info: Chromedriver: Changed state to 'starting'
> info: Chromedriver: Set chromedriver binary as: D:\Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe
> info: Chromedriver: Killing any old chromedrivers, running: FOR /F "usebackq tokens=5" %a in (`netstat -nao ^| findstr /R /C:"9515 "`) do (FOR /F "usebackq" %b in (`TASKLIST /FI "PID eq %a" ^| findstr /I chromedriver.exe`) do (IF NOT %b=="" TASKKILL /F /PID %a))
> info: Chromedriver: No old chromedrivers seemed to exist
> info: Chromedriver: Spawning chromedriver with: D:\Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\chromedriver.exe --url-base=wd/hub --port=9515
> info: Chromedriver: [STDOUT] Starting ChromeDriver 2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9) on port 9515
> Only local connections are allowed.
> info: JSONWP Proxy: Proxying [GET /status] to [GET http://127.0.0.1:9515/wd/hub/status] with no body
> info: JSONWP Proxy: Got response with status 200: "{\"sessionId\":\"\",\"status\":0,\"value\":{\"build\":{\"version\":\"alpha\"},\"os\":{\"arch\":\"x86_64\",\"name\":\"Windows NT\",\"version\":\"10.0.14393\"}}}"
> info: JSONWP Proxy: Proxying [POST /session] to [POST http://127.0.0.1:9515/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidDeviceSerial":"71MBBKU24CU7"}}}
> info: [debug] Didn't get a new command in 60 secs, shutting down...
> info: Shutting down appium session
> info: [debug] Pressing the HOME button
> info: [debug] executing cmd: D:\android-sdk-windows\platform-tools\adb.exe -s 71MBBKU24CU7 shell "input keyevent 3"
> info: [debug] Resetting IME to 'com.meizu.flyme.input/com.meizu.input.MzInputService'
> info: [debug] executing cmd: D:\android-sdk-windows\platform-tools\adb.exe -s 71MBBKU24CU7 shell "ime set com.meizu.flyme.input/com.meizu.input.MzInputService"
> info: [debug] Stopping logcat capture
> info: [debug] Logcat terminated with code null, signal SIGTERM
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"shutdown"}
> info: [debug] [BOOTSTRAP] [debug] Got command of type SHUTDOWN
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":"OK, shutting down"}
> info: [debug] Sent shutdown command, waiting for UiAutomator to stop...
> info: [debug] [UIAUTOMATOR STDOUT] [CDS]close[4724]
> info: [debug] [BOOTSTRAP] [debug] Closed client connection
104 seveniruby 使用 appium 进行微信小程序的自动化测试 中提及了此贴 1月10日 11:10
6822
wuhao · #19 · 2017年1月10日

capability.setCapability("deviceName", "emulator-5554")
模拟器是用的什么创建的呢?

14281
cynic · #20 · 2017年1月10日

#16楼 @kgdtkggfqp 我也想知道 请问你解决了嘛

104
seveniruby · #21 · 2017年1月10日

#19楼 @wuhao 随便写个即可. 如果写错了默认取第一个链接的设备 名字对才选择特定的名字的设备.

104
seveniruby · #22 · 2017年1月10日

#17楼 @balaroth 是不是你本地有http_proxy环境变量什么干扰了

96
balaroth · #23 · 2017年1月10日

@seveniruby 没有哇,无论如何就是切不到webview,contests是可以打印出来的,这是代码

#encoding: utf-8
import os
import unittest
import selenium
from appium import webdriver
from time import sleep

PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)

class xcxTests(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['fastReset'] = 'false'
        desired_caps['fastReset'] = 'false'
        desired_caps['deviceName'] = 'm1_note'
        desired_caps['appPackage'] = 'com.tencent.mm'
        desired_caps['appActivity'] = '.ui.LauncherUI'
        desired_caps['fullReset'] = 'false'
        desired_caps['unicodeKeyboard'] = 'True'
        desired_caps['resetKeyboard'] = 'True'

        options = selenium.webdriver.ChromeOptions()
        options.add_experimental_option('androidProcess', 'com.tencent.mm:tools')

        desired_caps['ChromeOptions.CAPABILITY'] = 'options'

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def test_didibus(self):
        self.driver.find_element_by_name('发现').click()
        self.driver.find_element_by_name('小程序').click()
        self.driver.find_element_by_name('搜索').click()
        sleep(5)
        self.driver.find_element_by_class_name('android.widget.EditText').send_keys('滴滴公交查询')
        os.popen('adb shell ime set com.meizu.flyme.input/com.meizu.input.MzInputService')
        self.driver.find_element_by_class_name('android.widget.EditText').click()
        os.popen('adb shell input keyevent 66')
        sleep(5)
        print(self.driver.contexts)
        self.driver.switch_to.context(u'WEBVIEW_com.tencent.mm:tools')
        self.driver.find_element_by_class_name('search_item_inner').click()

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(xcxTests)
    unittest.TextTestRunner(verbosity=2).run(suite)

搞了一天了。。。

104
seveniruby · #24 · 2017年1月10日

#23楼 @balaroth
这句话明显有问题啊. options是个对象. 被你搞成字符串了. 同样ChromeOptions.CAPABILITY也是一样. 这是个变量你必须换成你python版本的变量, 他也不是字符串. 这个变量真正的字符串是"ChromeOptions"

desired_caps['ChromeOptions.CAPABILITY'] = 'options'
14281
cynic · #25 · 2017年1月10日
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("androidProcess", "com.tencent.mm:tools");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);

这段用python怎么实现 ,搞了一天都没跑通

26楼 已删除
96
balaroth · #27 · 2017年1月10日

@seveniruby 可以了!谢谢

96
dzousigma · #28 · 2017年1月10日

#27楼 @balaroth 能分享下你的最终代码吗,我也研究这个问题,目前还没进展

96
weijiatiancai · #29 · 2017年1月10日

@balaroth 分享下你python 最终代码 为什么我用 谷歌//inspect/#devices定位path 一直报错 用法不对吗

96
weijiatiancai · #30 · 2017年1月10日

@balaroth 还有我贴options = selenium.webdriver.ChromeOptions() 这段代码的时候 ‘ webdriver’

96
balaroth · #31 · 2017年1月10日

@dzousigma @weijiatiancai

from appium import webdriver
***********
def setUp(self):

        desired_caps = {
            'platformName': 'Android',
            'fastReset': 'false',
            'deviceName': 'm1_note',
            'appPackage': 'com.tencent.mm',
            'appActivity': '.ui.LauncherUI',
            'fullReset': 'false',
            'unicodeKeyboard': 'True',
            'resetKeyboard': 'True',
            'chromeOptions': {
                'androidProcess' : 'com.tencent.mm:appbrand3'
                }
            }

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

com.tencent.mm:appbrand3这个根据webview的context改
这是setUp方法的写法,已经可以切到微信的webview了,不过有一些webview控件定位的细节还是不太懂,谁弄明白搞一份示例代码贴出来谢谢了

96
weijiatiancai · #32 · 2017年1月11日

@balaroth 你代码前面都没什么问题 就是最后 搜索出来的 ‘滴滴公交搜索‘ 这时候已经切换到webview界面了 然后执行点击

self.driver.find_element_by_class_name('search_item_inner').click() 执行失败报错
然后我用
self.driver.find_element_by_xpath('//*[@id="search_result"]/div[3]/div[1]/div/ul/li/div').click() 也报错了

有大神知道问题的说下 用的是谷歌的inspect定位 报错代码如下:
Error
Traceback (most recent call last):

File "/Users/daodaoge/PycharmProjects/untitled2/test.py", line 160, in test_scroll
self.driver.find_element_by_xpath('//*[@id="search_result"]/div[3]/div[1]/div/ul/li/div').click()
File "/Library/Python/2.7/site-packages/selenium-2.53.6-py2.7.egg/selenium/webdriver/remote/webdriver.py", line 293, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/Library/Python/2.7/site-packages/selenium-2.53.6-py2.7.egg/selenium/webdriver/remote/webdriver.py", line 752, in find_element
'value': value})['value']
File "/Library/Python/2.7/site-packages/selenium-2.53.6-py2.7.egg/selenium/webdriver/remote/webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "build/bdist.macosx-10.6-intel/egg/appium/webdriver/errorhandler.py", line 29, in check_response
raise wde
NoSuchElementException: Message: An element could not be located on the page using the given search parameters.

13790
hukui51770 · #33 · 2017年1月11日

@weijiatiancai ,我的成功运行,调试过程中也出现过你这个错误。从报错来看,应该是没有切换到webview,检查chromeOptions配置,和switch_to.context方法有没有问题 。

96
weijiatiancai · #34 · 2017年1月11日

@hukui51770 chromeOptions已经打开TBS 内核Inspector调试

print(self.driver.contexts) :内容如下
[u'NATIVE_APP', u'WEBVIEW_com.tencent.mm:tools']
我感觉应该是进入了 print结果如下:
NATIVE_APP
未找到
WEBVIEW_undefined
未找到
success
我Setup:
'chromeOptions': {
'androidProcess' : 'com.tencent.mm:appbrand1'
}
我一直不理解 appbrand1 代表什么意思 可以是appbrand2?appbrand3?吗
执行操作进入webview界面 代码:
self.driver.switch_to.context(u'WEBVIEW_com.tencent.mm:tools')

不知道到底哪里错误 用的是谷歌的inspect定位
求大神指点...

96
weijiatiancai · #35 · 2017年1月11日

@hukui51770 能贴个你成功完整的代码不 谢谢了 搞了二天没成功 ☹️😞

13790
hukui51770 · #36 · 2017年1月11日

@weijiatiancai ,driver.contexts print出来的是WEBVIEW_com.tencent.mm:tools,所以配置'chromeOptions': {
'androidProcess' : 'com.tencent.mm:tools',切换进入也是switch_to.context('WEBVIEW_com.tencent.mm:tools')。

96
xiaoxuxu · #37 · 2017年1月12日

@hukui51770 @balaroth 我想问一下你们 楼主说的那个 chromedriver 你们启动了么 需要添加环境变量吗 , 具体的操作能说说么 不是太懂这个插件 还有楼主说的端口 设置成8000...有影响吗

13790
hukui51770 · #38 · 2017年1月12日

@xiaoxuxu 。没有添加chromedriver环境变量和启动它,appium会自己启动它。微信要打开Inspector调试,下面是我的全部代码

from appium import webdriver
import time

desired_caps = {'platformName': 'Android',
'platformVersion': '5.1.1',
'deviceName': '8692_A00',
'app': '',
'appPackage': 'com.tencent.mm',
'appActivity':'.ui.LauncherUI',
'unicodeKeyboard': True,
'resetKeyboard': True,
'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(10)

driver.find_element_by_id('com.tencent.mm:id/bm6').click()
driver.find_element_by_id('com.tencent.mm:id/adq').click()
driver.find_element_by_name('佣金提现').click()
time.sleep(3)
print(driver.contexts)
driver.switch_to.context('WEBVIEW_com.tencent.mm:tools') #切换进入webview
driver.find_element_by_xpath('/html/body/section/section/div/div[3]/ul/li[1]/a').click()
driver.quit()

96
xiaoxuxu · #39 · 2017年1月12日

@hukui51770 真心非常感激 你webview定位的元素用的什么工具? 我用的appium版本1.4

96
weijiatiancai · #40 · 2017年1月12日
13790
hukui51770 · #41 · 2017年1月12日

@xiaoxuxu 微信上切换到webview页面,在google浏览器中输入chrome://inspect/#devices,会看到自己的webview页面地址,点击inspect 就在网页打开了,然后就和web定位控件一样,找到你想要的控件,右键copy xpath就ok了。也可以自己把那个链接复制,在浏览器打开然后点击google开发者工具,和前面一样操作

96
xiaoxuxu · #42 · 2017年1月12日

@hukui51770 非常感谢 很详细 !!

96
yukikla · #43 · 2017年1月12日

#38楼 @hukui51770
非常感谢!

96
Tester957 · #44 · 2017年1月12日

@seveniruby @hukui51770 @balaroth 请问下 我print(self.driver.contexts) 如:
[u'NATIVE_APP', u'WEBVIEW_com.tencent.mm:tools', u'WEBVIEW_com.android.quicksearchbox']
然后我self.driver.switch_to.context('WEBVIEW_com.android.quicksearchbox')
执行程序的时候一直处于缓冲状态 没报错也没执行 等了10分钟还是老样子 请问这是什么情况
'chromeOptions': {
'androidProcess' : 'WEBVIEW_com.android.quicksearchbox'
求指教

96
Tester957 · #45 · 2017年1月12日


已经找到web view了 然后self.driver.switch_to.context('WEBVIEW_com.tencent.mm:tools') 一直处于缓冲状态!!有大神知道原因么

我是在mac上 chromedriver 已放在appium的路径下

贴下报错代码
self.driver.find_element_by_class_name("gj-home-lock-tip").click()
self.error_handler.check_response(response)
File "build/bdist.macosx-10.6-intel/egg/appium/webdriver/errorhandler.py", line 29, in check_response
raise wde
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"gj-home-lock-tip"}
(Session info: webview=37.0.0.0)
(Driver info: chromedriver=2.18.343837 (52eb4041461e46a6b73308ebb19e85787ced4281),platform=Mac OS X 10.11.5 x86_64)

进行转换webview界面的时候 等了大概1分钟左右 然后print提示成功了...之后执行界面元素定位 就报错

96
Tester957 · #46 · 2017年1月12日

@seveniruby 你说 appium时候加上的http_proxy环境变量干扰了ChromeDriver的执行 需要怎么解决这个问题?

47楼 已删除
104
seveniruby · #48 · 2017年1月12日

#46楼 @Tester957 去掉不就行了. unset下. 你这是要别人手把手的教啊...回复的内容干扰版面, 我先删除了

96
zhangjunjie · #49 · 2017年1月13日

@sevenlruby 请问楼主 我appium提示 chrome not reachable是什么情况?

96
yukikla · #50 · 2017年1月13日

#31楼 @balaroth 有个问题想请教,搜索出来 ‘滴滴公交搜索‘ 的结果后,控件定位也没报错,但怎么点击控件以后没有跳转页面...你那边是否有这种情况?
为了验证是否有执行点击操作,我特意写了几个点击操作,都顺利执行了,就是点击后无反应
self.driver.switch_to.context(u'WEBVIEW_com.tencent.mm:tools')
self.driver.find_element_by_xpath('//[@id="search_result"]/div[3]/div[1]/div/ul/li[1]').click()
print "1"
self.driver.find_element_by_xpath('//
[@id="search_result"]/div[3]/div[1]/div/ul/li/div/div[2]/div/p[1]').click()
print "2"
self.driver.find_element_by_xpath('//*[@id="search_result"]/div[3]/div[1]/div/ul/li/div/div[2]/div').click()
print "3"
另外发现在谷歌开发者工具的inspect页面能拉动该结果页面,但点击也是没有跳转动作的😂 😂 只有我遇到这种情况吗?

96
zhangjunjie · #51 · 2017年1月13日

我的报错代码 :
Chromedriver: Error: An error occurred (Original error: chrome not reachable
(Driver info: chromedriver=2.18.343837 (52eb4041461e46a6b73308ebb19e85787ced4281),platform=Mac OS X 10.11.5 x86_64))
at JWProxy.command$ (lib/proxy.js:149:15)
at tryCatch (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-chromedriver/node_modules/babel-runtime/regenerator/runtime.js:67:40)
at GeneratorFunctionPrototype.invoke as _invoke
at GeneratorFunctionPrototype.prototype.(anonymous function) as next
at GeneratorFunctionPrototype.invoke (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-chromedriver/node_modules/babel-runtime/regenerator/runtime.js:136:37)
at bound (domain.js:254:14)
at GeneratorFunctionPrototype.runBound (domain.js:267:12)
at run (/Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-chromedriver/node_modules/babel-runtime/node_modules/core-js/library/modules/es6.promise.js:89:39)
at /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-chromedriver/node_modules/babel-runtime/node_modules/core-js/library/modules/es6.promise.js💯28
at process._tickDomainCallback (node.js:381:11)
{ [Error: An error occurred (Original error: chrome not reachable
(Driver info: chromedriver=2.18.343837 (52eb4041461e46a6b73308ebb19e85787ced4281),platform=Mac OS X 10.11.5 x86_64))]
status: 100,
value: { message: 'chrome not reachable\n (Driver info: chromedriver=2.18.343837 (52eb4041461e46a6b73308ebb19e85787ced4281),platform=Mac OS X 10.11.5 x86_64)' },
httpCode: 200 }

info: --> GET /wd/hub/status {}

error: Could not proxy command to remote server. Original error: connect ECONNREFUSED

info: JSONWP Proxy: Proxying [GET /wd/hub/status] to [GET http://127.0.0.1:9515/wd/hub/status] with body: {}

info: --> GET /wd/hub/status {}

error: Could not proxy command to remote server. Original error: connect ECONNREFUSED

info: JSONWP Proxy: Proxying [GET /wd/hub/status] to [GET http://127.0.0.1:9515/wd/hub/status] with body: {}

info: --> GET /wd/hub/status {}

error: Could not proxy command to remote server. Original error: connect ECONNREFUSED

info: JSONWP Proxy: Proxying [GET /wd/hub/status] to [GET http://127.0.0.1:9515/wd/hub/status] with body: {}

info: --> GET /wd/hub/status {}

error: Could not proxy command to remote server. Original error: connect ECONNREFUSED

info: JSONWP Proxy: Proxying [GET /wd/hub/status] to [GET http://127.0.0.1:9515/wd/hub/status] with body: {}

info: --> GET /wd/hub/status {}

96
zhangjunjie · #52 · 2017年1月13日

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

96
zhangjunjie · #53 · 2017年1月13日

warn: Chromedriver for context WEBVIEW_com.tencent.mm:tools stopped unexpectedly
warn: Chromedriver quit unexpectedly, but it wasn't the active context, ignoring

96
zrleo · #55 · 2017年1月16日


我的不知道为什么context只有native_app

96
zrleo · #56 · 2017年1月16日

#38楼 @hukui51770 您好 想问一下 您是怎么获取到context的 我也有打印 但是没有这个呢

6853
codeskyblue · #57 · 2017年1月20日

一直提示这玩意

WebDriverException: Message: unknown error: Chrome version must be >= 54.0.2840.0

看了下手机的chrome都55了

96
happymff · #58 · 2017年1月23日

我也遇到一样的问题@codeskyblue,提示:unknown error: Chrome version must be >= 54.0.2840.0\n (Driver info: chromedriver=2.27.440174 。不知道怎么处理。

6853
codeskyblue · #59 · 2017年1月23日

#58楼 @happymff 猜测是微信的WebKit版本不够导致的,或许应该把chromedriver或者selenium的版本降低一点

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