Appium 是一个开源的自动化测试框架,用于移动应用的 UI 测试。它支持 iOS 和 Android 平台,并且能够测试原生应用、混合应用以及 Web 应用。在混合应用测试中,经常会遇到需要在原生视图和 WebView 视图之间切换的情况。
混合应用:混合应用是指结合了原生应用和 Web 技术的应用程序。它们通常使用 WebView 组件来加载 Web 内容,并且可以与原生代码进行交互。
Appium 上下文切换:Appium 允许测试脚本在不同的上下文之间切换,例如从原生应用上下文切换到 WebView 上下文。上下文切换是通过获取当前所有可用的上下文列表,并选择特定的上下文来实现的。
当从混合应用程序中的本机导航到 WebView 时,可能会遇到无法获取驱动程序上下文 'WEBVIEW' 的问题。这通常是由于以下原因造成的:
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
desired_caps = {
'platformName': 'Android',
'deviceName': 'device',
'appPackage': 'com.example.app',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 等待 WebView 上下文出现
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "webview")))
desired_caps['chromedriverExecutable'] = '/path/to/chromedriver'
desired_caps['androidDeviceReadyTimeout'] = 30
desired_caps['androidUseRunningApp'] = True
contexts = driver.contexts
for context in contexts:
if 'WEBVIEW' in context:
driver.switch_to.context(context)
break
通过以上步骤,通常可以解决从混合应用程序中的本机导航到 WebView 时无法获取驱动程序上下文 'WEBVIEW' 的问题。如果问题仍然存在,可能需要进一步检查应用的 WebView 配置或者 Appium 的日志输出以确定具体的原因。
领取专属 10元无门槛券
手把手带您无忧上云