作者:hedongsheng | 来源:互联网 | 2024-11-24 19:59
本文详细介绍了如何使用Python结合Selenium和unittest构建自动化测试框架,重点解析了WebDriver浏览器驱动的配置与使用方法,涵盖Chrome、Firefox、IE/Edge等主流浏览器。
在探讨WebDriver浏览器驱动的具体实现前,我们先简要回顾一下基于Python的自动化测试框架——Selenium和unittest。Selenium是一个强大的开源自动化测试工具,专为Web应用设计,能够在真实的浏览器环境中模拟用户的交互行为。它支持多种操作系统、浏览器和编程语言,因此被广泛应用于自动化测试领域。而unittest则是Python的标准库之一,提供了丰富的功能帮助开发者构建和管理测试用例。
为了更好地利用这些工具,我们需要完成一些基础的环境设置:
- 首先,推荐使用Python 3,可通过Python官方网站下载并安装,安装完成后记得将Python的安装路径添加到系统的PATH环境变量中。
- 接着,安装Selenium。完成Python的安装后,可以直接通过pip命令安装Selenium,具体命令为:cmd → pip install selenium。
- 对于unittest,由于它是Python的内置模块,使用时只需在代码中导入即可,例如:import unittest。
WebDriver作为Selenium的核心组件,通过特定的驱动程序来控制浏览器执行自动化测试脚本。不同操作系统和浏览器可能需要不同的驱动配置,因此我们将介绍如何封装通用的浏览器驱动方法,以适应多样的测试需求。
本文将逐步引导读者了解Web UI自动化测试的基本方法,并通过具体的示例展示如何封装和使用三大主流浏览器(Chrome、Firefox、IE/Edge)的WebDriver驱动方法。
1. Chrome 浏览器驱动Chrome的驱动程序名为chromedriver,它并不严格区分32位和64位系统,主要确保与浏览器版本相匹配。对于较新的Chrome版本(70及以上),chromedriver的版本应与Chrome的大版本保持一致。如果一个Chrome版本对应多个chromedriver版本,可以通过详细的版本号或发布时间来选择合适的驱动程序。如图所示:
对于早期的Chrome版本,Chrome版本号与chromedriver版本号可能不一致,这时可以通过版本对照表来选择正确的驱动程序。如图所示:
更多关于chromedriver的信息,可访问其官方下载页面获取。
2. Firefox 浏览器驱动Firefox的驱动程序名为geckodriver,其版本需要与Selenium和Firefox版本相匹配。Selenium 2内建的驱动程序默认支持路径安装的Firefox。而Selenium 3及更高版本则支持Firefox 47及之后的版本,虽然没有严格的版本对应表,但通常推荐根据浏览器和geckodriver的发布时间来选择匹配的版本。如图所示:
有关geckodriver的更多信息,可访问其官方下载页面获取。
3. IE/Edge 浏览器驱动对于IE浏览器,其驱动程序为IEDriverServer,版本需与Selenium版本相匹配。此外,还需要确保在IE浏览器的安全选项中启用了所有四个区域(Internet、本地Intranet、可信站点、受限站点)的保护模式。如图所示:
关于IEDriverServer的更多信息,可访问其官方下载页面获取。
而对于Edge浏览器,旧版Edge 18及以上的版本会自动提供WebDriver更新,而旧版Edge 17及以下版本则需要手动下载对应的MicrosoftWebDriver版本。如图所示:
注意区分新版和旧版MicrosoftWebDriver的下载链接。如图所示:
更多关于MicrosoftWebDriver/edgedriver的信息,可访问其官方下载页面获取。
4. 浏览器驱动封装实例 (Python)from selenium import webdriver
class BrowserWrapper(object):
def __init__(self):
self.driver = None
def launch_browser(self, browser_name):
'''
启动指定的浏览器
:param browser_name: 浏览器名称,支持 'Chrome', 'Firefox', 'IE', 'Edge'
:return: None
'''
if browser_name == 'Chrome':
print('=== 正在启动 Chrome 浏览器...')
chrome_optiOns= webdriver.ChromeOptions()
# 禁用自动化受控提示和开发者模式扩展
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation', 'load-extension'])
# 禁用保存密码提示
prefs = {'credentials_enable_service': False, 'profile.password_manager_enabled': False}
chrome_options.add_experimental_option('prefs', prefs)
self.driver = webdriver.Chrome(optiOns=chrome_options)
elif browser_name == 'Firefox':
print('=== 正在启动 Firefox 浏览器...')
self.driver = webdriver.Firefox()
elif browser_name == 'IE':
print('=== 正在启动 IE 浏览器...')
self.driver = webdriver.Ie()
elif browser_name == 'Edge':
print('=== 正在启动 Edge 浏览器...')
self.driver = webdriver.Edge()
else:
print('=== 未知的浏览器类型,请选择支持的浏览器...')
if __name__ == '__main__':
bw = BrowserWrapper()
bw.launch_browser('Chrome')