Appium Appium context 切换的问题

wtnhz · 2018年07月18日 · 最后由 宣梦达 回复于 2018年07月23日 · 2782 次阅读

问题:从 native 切换到 webview 的时候,长时间没有任何相应,然后挂掉~
机型:小米 5
rom:别人刷的 android8.0
appium server:1.8.1

也看到了类似差不多的问题,但是都没有能解决我现在的问题;
chrome 对应的 chromedriver 应该也没问题,然后我一直比较怀疑的是
'chromeOptions': {
'androidProcess': '进程名'
}
这个进程名是不是写错了

还有 switch_context 切换 context 的时候 切换的是不是切换错了

Log
Traceback (most recent call last):
  File "E:\pyworkspace\demos\webview_test\webview_tests.py", line 61, in <module>
    switch_context(driver)
  File "E:\pyworkspace\demos\webview_test\webview_tests.py", line 27, in switch_context
    driver.switch_to.context(context)
  File "D:\Program Files\Python\Python36\lib\site-packages\appium\webdriver\switch_to.py", line 31, in context
    self._driver.execute(MobileCommand.SWITCH_TO_CONTEXT, {'name': context_name})
  File "D:\Program Files\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "D:\Program Files\Python\Python36\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response
    raise wde
  File "D:\Program Files\Python\Python36\lib\site-packages\appium\webdriver\errorhandler.py", line 24, in check_response
    super(MobileErrorHandler, self).check_response(response)
  File "D:\Program Files\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Failed to start Chromedriver session: An error occurred (Original error: chrome not reachable
  (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 6.1.7601 SP1 x86_64))


代码 就是随便写的demo 就想去微信的小程序 拼多多里面去随便看测下
import os
import sys
sys.path.append(os.path.split(os.path.dirname(os.path.abspath(__file__)))[0])
import time
from appium import webdriver
from webview_test.driver_utils import DriverUtils


def switch_context(driver, context="WEBVIEW_com.tencent.mm"):

    contexts = driver.contexts
    print("contexts:%s" % contexts)
    if context in contexts:
        print(u"切换到相应的环境下面")
        driver.switch_to.context(context)
        return True
    else:
        print(u"没有切换到相应的环境下面,当前的环境为" + str(driver.context))
        return False


desired_caps = {
    'platformName': 'Android',
    'deviceName': 'b8320a1',
    'platformVersion': '8.0',
    'appPackage': 'com.tencent.mm',
    'appActivity': '.ui.LauncherUI',
    'unicodeKeyboard': 'True',
    'resetKeyboard': 'True',
    'noReset': True,
    # 'autoLaunch': False,
    'recreateChromeDriverSessions': True,
    'chromeOptions': {
        'androidProcess': 'com.tencent.mm:appbrand0'
    },
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
contexts = driver.contexts
print("contexts:%s" % contexts)
time.sleep(3)
du = DriverUtils(driver)
print("向下滑动")
du.swipe_bottom()
print("向下滑动")
du.swipe_bottom()
time.sleep(3)
du.find_elem_by_name("拼多多微主页").click()
time.sleep(10)
switch_context(driver)
print("向上滑动")
du.swipe_top()
time.sleep(10)

共收到 11 条回复 时间 点赞

我也有这个问题,卡了我两个月了,求大佬帮忙啊

手机问题,chromedriver 版本对应,页面加载是否完成

你好 chrome 可以浏览 h5 元素,显示 57 版本,我下了对应 57 版本的驱动,还是卡住@grizz

grizz 回复

你好,谷歌驱动对应了 57 版本,切换没有加载完成,一直加载,超时了就报错,我手机 webview60 版本

宣梦达 回复

发生场景结合 appium 日志能更好的解决你的问题

'androidProcess': 'com.tencent.mm:appbrand0'改成'androidProcess': 'com.tencent.mm:tools'

tracy 回复

试过了~ 我把 com.tencent.mm:appbrand0 ;com.tencent.mm;com.tencent.mm:appbrand1 ;com.tencent.mm:tools 这四个进程都试了

grizz 回复

主要日记卡的不动。没日记

我这边昨天遇到了 context 切换问题:
1.可以确定一下日志中打印出的 chromedriver 与 chrome 映射是否一致问题

[Chromedriver] Chromedriver version: '2.23.409710'
[Chromedriver] Webview version: 'Chrome/51.0.2704.110'

2.切换 context 时传的参数具体是什么?
我这边用 python 获取 context 时返回的是数组,里面既有原生也有 webview 然后切换 webview

[u'NATIVE_APP',  u'WEBVIEW_com.tencent.mm:tools']

3.
一般进程 android_process 和 context 返回的值一致就可以~~~
https://testerhome.com/topics/15169

你 chromedriver 是 chromedriver=2.30.477700 对应的是 58-60

你的微信中的应该是 57 版本 chrome not reachable 你尝试一下将 chromedriver2.30 降为 2.29

试过了 一样卡死

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