Python 语言测试测试手机 APP,如何切换到 webview,让程序跑起来呢,在官网查到的资料,根本跑不起,大家可以分享一下成功的代码吗
先看是不是 webview,有些 APP 用了自己的 view,而不是标准 webview,所以 appium 对这种情况无能为力
先获取全部的 contexts:
const contexts = yield driver.contexts();
contexts 是个数组,第一个是原生,例如是:NATIVE_APP
。每打开一个 webview,contexts 数组就会插进来一个值,contexts[contexts.length -1]
就是当前的 context 了,然后切换一下:
yield driver.context(contexts[contexts.length -1];
我写的例子是用 Node 的。错误日志,最好看 Appium 的 log。
切换到 APP 中的 webview,首先要得到这个 webview 对应的上下文(context),wd 中有个方法可以获取当前全部的 contexts,一般 APP 里面每个 webview 对应的 context 都不同,在不同机器上也不会相同,你不能写死了,要先把 contexts 取到。
比方你刚刚打开了一个 webview,这个时候 contexts 的最后一个字符串就是这个 webview 的 context。
我感觉 node 和 python 写法应该差不多 (就两行):
contexts = yield driver.contexts();
yield driver.context(contexts[contexts.length - 1]);
你上面的切换写死了 context:WEBVIEW_com.sina.book
,你咋能确定当前手机当前 APP 当前 WebView 的 context 是这个呢?不是这个 Appium 会报错,你需要先用 Appium 自己取读取这个值,具体方法你得查 WD 的 API。
driver.switch_to.context('WEBVIEW') # 切换到 webview
driver.find_element_by_class_name('goods1').click() # 点击 webview 里边的元素,一个 m 站的网页元素。
driver.switch_to.context('NATIVE_APP') # 切换到原生 app
我代码就是这样的,亲测可用。
#coding=utf-8
from appium import webdriver
from selenium.webdriver.common.keys import Keys
from appium.webdriver.webdriver import WebDriverWait
from appium.webdriver.common.mobileby import MobileBy
from appium.webdriver.switch_to import MobileSwitchTo
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
op = {}
op['platformName'] = 'Android'
op['deviceName'] = 'Android Emulator'
op['appPackage'] = 'com.sina.book'
op['appActivity'] = '.ui.activity.splash.SplashActivity'
op['unicodeKeyboard'] = True
op['resetKeyboard'] = True
op['newCommandTimeout'] = 10
op['noReset'] = True
driver = webdriver.Remote('http://localhost:4723/wd/hub,op')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((MobileBy.XPATH,'//android.widget.TextView[@text="书城"]')))
driver.find_element_by_xpath('//android.widget.TextView[@text="书城"]').click()
driver.switch_to.context('WEBVIEW')
driver.find_element_by_css_selector('.main-nav > a:nth-child(1)').click()
很无语了,下边报错提示都说明了,google 翻译一下。
大神,我知道下面提示的报错,但也确实是找了很多地方,不知道该怎么改,我真的是第一次做这块,一点经验也没有
怎么我的 dirver 里面没有 switch_to.context() 方法 只有 switch_to.default_content() 求大神帮助
谷歌浏览器、猎豹、qq 浏览器 输入下面的地址 就可以直接看了 chrome://inspect/#devices
你的问题解决了么?我的 driver 里面也是没有 switch_to.context() 方法 只有 switch_to.default_content()
只能获取到原生的 NATIVE_APP,该怎么办?