ChromeDriver
简介
ChromeDriver
是一个用于自动化测试浏览器的开源工具,它提供了web
页面导航、用户输入、JavaScript
执行等多种能力。ChromeDriver
是基于W3C
的WebDriver
标准的一个实现,可用于在Android
或PC
桌面(Mac
、Linux
、Windows
、ChromeOS
)对Chrome
浏览器进行自动化测试。
简而言之就是,可以通过多种语言编写客户端自动化脚本,通过webDriver
规范定义的标准发送到ChromeDriver
,ChromeDriver
按照客户端的执行执行对浏览器的控制,执行结果或获取的信息再返回给客户端,从而实现自动化测试。
ChromeDriver
和Chrome
浏览器之间有版本匹配要求,具体可以参考这里。
本文使用的环境信息:
名称 | 版本信息 |
---|---|
操作系统 | Ubuntu 22.04 |
JDK | 20.0.1 |
Android SDK | 33 |
AVD(模拟器) | 模拟器名称testPhone
|
Python | 3.10.12 |
1、如何使用WebDriver
在PC
桌面测试Chrome
1.1、在编写自动化测试脚本之前,需要提前准备
- 已经安装好
Chrome
浏览器,并下载对应的ChromeDriver
,由于者两者有版本匹配要求,因此推荐从这里选择版本下载,对于每个版本它会同时提供Chrome
和ChromeDriver
,不用担心匹配问题。本文下载的版本是114.0.5731.1
,下载chrome-linux.zip
和chromedriver_linux64.zip
两个包,并假设它们解压之后放置的路径分别为/home/chrometest/chrome/
和/home/chrometest/chromedriver/
下。
1.2、编写测试脚本
本文的例子客户端脚本、Chrome
浏览器和ChromeDriver
都位于一台机器上。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
def test_chromedriver_for_pc():
# 启动chromedriver
chromedriver_path = "/home/chrometest/chromedriver/chromedriver" # 指定ChromeDriver的路径
service = Service(chromedriver_path)
service.start()
# 建立会话
options = Options()
options.binary_location = "/home/chrometest/chrome/chrome" # 指定Chrome浏览器的路径
driver = webdriver.Remote(service.service_url, options=options)
driver.get('https://www.linux.org/')
time.sleep(3)
driver.quit()
2、如何使用WebDriver
在Android
系统测试Chrome
2.1、在编写自动化测试脚本之前,需要提前准备
-
搭建
Android
自动化测试环境,请参考Appium
环境搭建; -
注意
ChromeDriver
版本要与Android
设备上的Chrome
浏览器版本匹配。具体请参考version-selection -
执行如下命令:
启动ADB
adb start-server
如果是早期的版本( Chrome 33 版本及之前),需要执行如下命令获取路径读写权限
adb shell su -c chmod 777 /data/local
2.2、编写测试脚本
def test_chromedrvier_for_android():
options = webdriver.ChromeOptions()
options.add_experimental_option('androidPackage', 'com.android.chrome') # 打开Android设备上的Chrome浏览器
chromedriver_path = "/home/chrometest/chromedriver/chromedriver"
service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service, options=options)
driver.get('https://www.linux.org/')
driver.quit()
3、能力参数和选项介绍
能力参数用于定制和配置一个与ChromeDriver
的连接会话,根据客户端实现语言不一样,提供的API
接口可能有差异,但是基本上都可以通过如下两种方式实现能力参数的设置:
-
ChromeOptions
类,使用实例(Python
语言)
def test_chromedriver_options():
options = webdriver.ChromeOptions()
options.add_extension("extension.crx")
options.set_capability("platformName", "Linux")
# 命令行参数
# 启动Chrome时就最大化
options.add_argument("start-maximized")
# 指定Chrome位置
options.binary_location = "/path/to/chrome"
dirver = webdriver.Chrome(options=options)
-
DesiredCapabilities
类
def test_chromedriver_desiredcapabilities():
desire = webdriver.DesiredCapabilities.CHROME.copy()
desire['platformName'] = "Linux"
driver = webdriver.Remote(desired_capabilities=desire)
W3C
的WebDriver
标准能力参数见WebDriver简介,接下来介绍一些ChromeDriver
支持的Chrome
浏览器独有的能力参数定义。
- 如下支持的能力参数在
Python
中都可以在ChromeOptions
类中进行添加(部分能力参数最终存在以`goog:chromeOptions"为键的字典中)
能力名称 | 类型 | 默认值 | 具体描述 | 对应Python 的API 接口举例 |
---|---|---|---|---|
args |
string 列表 |
无 | 启动Chrome 时候传入的命令行参数,参数和值之间使用= 连接(例如['start-maximized', 'user-data-dir=/tmp/temp_profile'] ),支持的参数列表可以参考这里。 |
options = webdriver.ChromeOptions() options.add_argument("start-maximized")
|
binary |
string |
无 |
Chrome 可执行文件的路径(在MacOs 上,这个路径必须指向真实的二进制文件,而不是app ) |
options = webdriver.ChromeOptions() options.binary_location = "/path/to/chrome"
|
extensions |
string 列表 |
无 | 启动Chrome 时需要下载的扩展,列表中的每一项都是基于base64 编码打包的Chrome 扩展(.crx )。 |
options = webdriver.ChromeOptions() options.add_extension("extension.crx")
|
localState |
字典 | 无 | 包含首选项及其值的字典,这些选项应用到用户数据文件夹下的本地状态文件。 |
options = webdriver.ChromeOptions() options.add_experimental_option("localState", {"key":"value"})
|
prefs |
字典 | 无 | 包含首选项及其值的字典,这些选项只应用于使用中的用户属性文件。 |
options = webdriver.ChromeOptions() options.add_experimental_option("prefs", {"key":"value"})
|
detach |
boolean |
false |
如果该值为false ,当ChromeDriver 退出时,不管会话是否关闭,Chrome 都会终止。如果设置为true ,那么Chrome 只会在会话关闭时终止。注意:如果设置为true ,会话未关闭的情况下,ChromeDriver 无法清理临时用户数据目录因为Chrome 还在运行。 |
options = webdriver.ChromeOptions() options.add_experimental_option('detach', True)
|
debuggerAddress |
string |
无 |
Chrome 调试服务器地址,格式为<hostname/ip:port> ,例如127.0.0.1:38947 。 |
options = webdriver.ChromeOptions() options.debugger_address = "127.0.0.1:38947"
|
excludeSwitches |
string 列表 |
无 | 排除启动Chrome 时ChromeDriver 默认传递的开关列表。开关不需要加前缀-- 。 |
options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches", "switches")
|
minidumpPath |
string |
无 |
Chrome 的dump 文件路径(仅在Linux 下支持)。 |
options = webdriver.ChromeOptions() options.add_experimental_option("minidumpPath", "/path/to/dumpfile")
|
mobileEmulation |
字典 | 无 | 指定模拟器相关的信息,包含deviceName 或deviceMetrics 或userAgent 值的字典。 |
options = webdriver.ChromeOptions() options.add_experimental_option("mobileEmulation", {"deviceName" : "emulator-5554"})
|
perfLoggingPrefs |
字典 | 无 | 指定日志选项性能,具体取值见下表。 |
options = webdriver.ChromeOptions() options.add_experimental_option("perfLoggingPrefs", {"enableNetwork" : True})
|
windowTypes |
string 列表 |
无 | 可能出现在窗口处理中的窗口类型列表,例如,为了访问<webview> 元素,把webview 加入到该列表中。 |
options = webdriver.ChromeOptions() options.add_experimental_option("windowTypes", ["webview"])
|
perfLoggingPrefs
字典的取值:
力名称 | 类型 | 默认值 | 具体描述 |
---|---|---|---|
enableNetwork |
boolean |
true |
是否从网络域收集事件。 |
enablePage |
boolean |
true |
是否从页面域收集事件。 |
traceCategories |
string |
空 | 指定Chrome 跟踪项中的的跟踪事件,是以分号分隔的字符串。 |
bufferUsageReportingInterval |
非负整数 | 1000 |
DevTools 跟踪缓冲区使用事件请求间隔的毫秒数。例如,如果是1000 ,那么DevTools 将每秒报告一次跟踪缓冲区的使用情况。如果缓冲区使用率为100% ,则会发出警告。 |
网友评论