WebView 自动化测试过程笔记
一、WebView 简介
WebView 是一个基于 WebKit 引擎、展现 Web 页面的控件,常用于 Android 和 iOS 应用中嵌入网页内容。在进行自动化测试时,需要针对 WebView 元素进行定位和操作,这与普通原生应用元素的操作有所不同。
二、环境准备
(一)Android 环境
- 安装 Appium
- 可通过 npm 进行安装:
npm install -g appium
- 启动 Appium 服务器:
appium
- 可通过 npm 进行安装:
- 安装 Appium Python 客户端
- 使用 pip 安装:
pip install Appium-Python-Client
- 使用 pip 安装:
- 安装 Android SDK
- 配置好
ANDROID_HOME
环境变量。
- 配置好
(二)iOS 环境
- 安装 Appium 同 Android 环境。
- 安装 Appium Python 客户端 同 Android 环境。
- 安装 Xcode
- 配置好相关开发者证书和设备。
三、测试步骤
(一)启动应用并进入 WebView 界面
from appium import webdriver
# 配置 desired capabilities
desired_caps = {
"platformName": "Android", # 或 iOS
"platformVersion": "10", # 设备系统版本
"deviceName": "emulator-5554", # 设备名称
"appPackage": "com.example.app", # 应用包名
"appActivity": "com.example.app.MainActivity", # 应用启动 Activity
"automationName": "UiAutomator2" # Android 自动化引擎
}
# 连接 Appium 服务器
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 等待应用启动,可根据实际情况调整等待时间
driver.implicitly_wait(10)
# 进行操作进入 WebView 界面
# 例如点击某个按钮进入
button = driver.find_element_by_id('button_id')
button.click()
(二)切换到 WebView 上下文
# 获取所有上下文
contexts = driver.contexts
print(contexts)
# 切换到 WebView 上下文
for context in contexts:
if 'WEBVIEW' in context:
driver.switch_to.context(context)
break
(三)定位和操作 WebView 元素
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 定位元素
# 例如通过 ID 定位输入框
input_box = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'input_id'))
)
# 输入文本
input_box.send_keys('Hello, WebView!')
# 点击按钮
button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, 'button_id'))
)
button.click()
(四)切换回原生上下文
# 切换回原生上下文
driver.switch_to.context('NATIVE_APP')
(五)结束测试
# 关闭应用
driver.quit()
四、注意事项
(一)WebView 版本兼容性
不同版本的 WebView 可能存在一些差异,需要确保应用使用的 WebView 版本与测试环境兼容。
(二)上下文切换问题
- 切换上下文时,要确保 WebView 已经完全加载,否则可能无法正确切换。
- 可以使用显式等待来确保 WebView 上下文可用。
(三)元素定位问题
- WebView 内的元素定位方法与普通网页元素定位相同,可使用 ID、class、XPath 等方式。
- 由于 WebView 是在应用内加载的,可能存在元素加载缓慢的情况,需要使用显式等待来确保元素可操作。
(四)安全问题
在进行 WebView 自动化测试时,要注意应用的安全机制,避免因测试操作导致安全漏洞。
五、常见问题及解决方法
(一)无法切换到 WebView 上下文
- 原因:WebView 未正确加载或配置问题。
- 解决方法:
- 确保 WebView 已经完全加载,可以增加等待时间。
- 检查
desired capabilities
中是否正确配置了chromedriverExecutable
(Android)或webkitDebugProxyPort
(iOS)。
(二)元素定位失败
- 原因:元素加载缓慢、定位方式不正确或元素动态生成。
- 解决方法:
- 使用显式等待确保元素加载完成。
- 检查定位方式是否正确,可尝试使用不同的定位方式。
- 对于动态生成的元素,可使用相对定位或结合 JavaScript 进行定位。
(三)测试不稳定
- 原因:网络问题、设备性能问题或应用本身不稳定。
- 解决方法:
- 确保测试设备网络稳定。
- 清理设备缓存,释放内存。
- 检查应用是否存在内存泄漏或其他性能问题。