Appium 混合应用切换webview

切换webview步骤

以下是在Appium测试中与webview对话所需的步骤:

  1. 导航到应用程序中web页面
  2. 获取上下文列表,它返回一个我们可以访问的上下文列表,例如:NATIVE_APPWEBVIEW_1
  3. 切换到你要操作的webview,原来是在NATIVE_APP,切换到WEBVIEW_1do something
  4. 操作完后,返回到原来的app view(通常为NATIVE_APP
Python
from appium import webdriver

mobile_desired_caps = {
    'platformName': 'Android',
    'platformVersion': '7.0',
    'deviceName': 'your device name',
    "app": r"your.apk",
    # 指定Chromedriver存放的地址,或者下边的路径,二者其一即可
    "chromedriverExecutableDir": r"C:\path",
    # "chromedriverExecutable": r"C:\path\chromedriver.exe",
    # 声明中文
    "unicodeKeyboard": 'True',
    # 声明中文,否则不支持中文
    "resetKeyboard": 'True',
    # 执行时不重新安装包
    'noReset': 'True',
    'automationName': 'uiautomator2',
    'appPackage': 'your package',
    'appActivity': 'your App activity'
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', mobile_desired_caps)
# 点击进入到webview页面
driver.find_elements_by_id("id").click()
# 切换到 webview
webview = driver.contexts[-1]
driver.switch_to.context(webview)
print "###########################################"
print driver.contexts
# [u'NATIVE_APP', u'WEBVIEW_xxxxxxxxx']
# 判断webview上的元素是否存在
print driver.find_element_by_id("btnLogoutConfirmation").is_displayed()
# 返回到原生view
driver.switch_to.context(driver.contexts[0])
Java
DesiredCapabilities cap = new DesiredCapabilities(); 
//运行mobile browser时指定 
//cap.setCapability(CapabilityType.BROWSER_NAME, "chrome");  
cap.setCapability("platformName", "Android"); //指定测试平台  
//指定测试机的ID,通过adb命令adb devices获取  
cap.setCapability("deviceName", "your device name"); 
cap.setCapability("platformVersion", "7.0");  
cap.setCapability("app", "your.apk");
cap.setCapability("appPackage", "your package");  
cap.setCapability("appActivity", "your app activity");  
// 指定Chromedriver存放的地址,或者下边的路径,二者其一即可
cap.setCapability("chromedriverExecutableDir", "C:\path");

driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);
// 点击进入到webview页面
driver.findElement(By.cssSelector(".login_button")).click();
Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
	//prints out something like NATIVE_APP \n WEBVIEW_1
    System.out.println(contextName); 
}
// 切换到 webview
driver.context((String) contextNames.toArray()[1]); 
//do some web testing
String myText = driver.findElement(By.cssSelector(".green_button")).click();
// 切换到原生view
driver.context("NATIVE_APP");
// do more native testing if we want
driver.quit();
运行时报错

selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: No Chromedriver found that can automate Chrome ‘64.0.3282’. See https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md for more details.

报类似这种错误是由于Chrome和driver版本不对应的原因。

解决方案
  1. 根据错误提示显示的版本号 64.0.3282下载相应的Chromedriver版本(参考下边),将下载的driver解压,替换掉路径(Windows)C:\Users\xxxx\AppData\Local\Programs\Appium\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win下的chromedriver.exe即可
  2. 运行脚本时指定chromedriver的运行路径(下载对应版本的driver,放在该路径下),即在desired_caps添加chromedriverExecutableDirchromedriverExecutable字段(如上边的Java和Python代码)
chromedriver对应Chrome的版本
VersionMinimum Chrome VersionLink to Chromedriver
2.4469.0.3497.0v2.44 (link)
2.4369.0.3497.0v2.43 (link)
2.4268.0.3440.0v2.42 (link)
2.4167.0.3360.0v2.41 (link)
2.4066.0.3359.0v2.40 (link)
2.3966.0.3359.0v2.39 (link)
2.3865.0.3325.0v2.38 (link)
2.3764.0.3282.0v2.37 (link)
2.3663.0.3239.0v2.36 (link)
2.3562.0.3202.0v2.35 (link)
2.3461.0.3163.0v2.34 (link)
2.3360.0.3112.0v2.33 (link)
2.3259.0.3071.0v2.32 (link)
2.3158.0.3029.0v2.31 (link)
2.3058.0.3029.0v2.30 (link)
2.2957.0.2987.0v2.29 (link)
2.2855.0.2883.0v2.28 (link)
2.2754.0.2840.0v2.27 (link)
2.2653.0.2785.0v2.26 (link)
2.2553.0.2785.0v2.25 (link)
2.2452.0.2743.0v2.24 (link)
2.2351.0.2704.0v2.23 (link)
2.2249.0.2623.0v2.22 (link)
2.2146.0.2490.0v2.21 (link)
2.2043.0.2357.0v2.20 (link)
2.1943.0.2357.0v2.19 (link)
2.1843.0.2357.0v2.18 (link)
2.1742.0.2311.0v2.17 (link)
2.1642.0.2311.0v2.16 (link)
2.1540.0.2214.0v2.15 (link)
2.1439.0.2171.0v2.14 (link)
2.1338.0.2125.0v2.13 (link)
2.1236.0.1985.0v2.12 (link)
2.1136.0.1985.0v2.11 (link)
2.1033.0.1751.0v2.10 (link)
2.931.0.1650.59v2.9 (link)
2.830.0.1573.2v2.8 (link)
2.730.0.1573.2v2.7 (link)
2.629.0.1545.0v2.6 (link)
2.529.0.1545.0v2.5 (link)
2.429.0.1545.0v2.4 (link)
2.328.0.1500.0v2.3 (link)
2.227.0.1453.0v2.2 (link)
2.127.0.1453.0v2.1 (link)
2.027.0.1453.0v2.0 (link)

所有可用的Chromedriver版本在这里

扩展(自动化mobile web)
  1. 运行自带的浏览器则修改配置为'browserName': 'Browser'(我用的android pad,目前测试不成功。。)
    通过安装Chrome APP,然后执行以下脚本是可以的:
    from appium import webdriver
    
    web_desired_caps = {
        'platformName': 'Android',
        'platformVersion': '7.0',
        'deviceName': '520381b347dd148b',
        'browserName': 'chrome',
    }
    driver = webdriver.Remote('http://localhost:4723/wd/hub', web_desired_caps)
    driver.get("https://www.baidu.com/")
    
  2. 获取APP的appPackageappActivity
    打开APP,然后命令行运行:adb shell dumpsys window windows | findstr "Current"
    则看到appPackageappActivity(以下是打开自带浏览器):
    在这里插入图片描述
参考
  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值