Python 语言测试测试手机 APP,如何切换到 webview,让程序跑起来呢,在官网查到的资料,根本跑不起,大家可以分享一下成功的代码吗
先看是不是 webview,有些 APP 用了自己的 view,而不是标准 webview,所以 appium 对这种情况无能为力
是 webview,只是我第一次搞这块,没有模板,不知道 Python 切换到 webview 的代码,您可以分享一下吗
这是我切换的代码,可以都报错
先获取全部的 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
我代码就是这样的,亲测可用。
大神,我刚才跑了一下,还是报错啊,您能把您上下文的代码也分享一下吗,我觉得是不是在切换到 webview 之后,还要 list 一下元素
这是我定位的图,根本找不到定位的元素啊
#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()
大神,真心感谢,您这么负责任,可是我整体复制跑完之后,还是报错了,您看看,还学要哪里改动吗
手机和 chrome 需要做什么改动吗
很无语了,下边报错提示都说明了,google 翻译一下。
大神,我已经跑成功了,谢谢您,但是就是还不是很清楚,我跑成功之后,我该怎么通过 Xpath 的方式去定位元素,测试 H5
怎么我的 dirver 里面没有 switch_to.context() 方法 只有 switch_to.default_content() 求大神帮助
你的问题解决了么?我的 driver 里面也是没有 switch_to.context() 方法 只有 switch_to.default_content()
用你的这个会报错呢
只能获取到原生的 NATIVE_APP,该怎么办?