5Python与Selenium网络测试 本章详细介绍Selenium。首先说明Selenium IDE的功能和使用方法;其次重点介绍SeleniumWebDriver,包括环境搭建、定位网页元素的相关方法,给出了定位静态页面和动态页面的具体实例;最后给出unittest与Selenium相结合的实例。 5.1Selenium简介 Selenium是一个用于Web应用程序自动化测试的工具,它直接运行在浏览器中,支持IE7~11、Mozilla Firefox、Safari、Google Chrome等浏览器。Selenium的命名比较有意思,翻译为化学元素“硒”。这是因为QTP是主流的商业自动化测试工具,意为化学元素“汞”(俗称水银),而硒可以对抗汞。 2004年,Selenium Core诞生,它是基于浏览器并且采用JavaScript编程语言的测试工具,运行在浏览器的安全沙箱中。设计理念是将待测试产品、Selenium Core和测试脚本均部署到同一台服务器上,来完成自动化测试的工作。2005年,Selenium RC诞生,就是Selenium 1.0。Selenium RC让待测试产品、Selenium Core和测试脚本三者分散在不同的服务器上。 Selenium实际上不是一个测试工具,而是一个工具集,Selenium 1.0主要由三个核心组件构成: Selenium IDE、Selenium RC(Remote Control)及Selenium Grid,如表5.1所示。表5.1Selenium1.0 工具集 工具描述Selenium IDE一个Firefox插件,用于记录测试工作流程,以记录操作行为Selenium RC用于测试浏览器动作的执行Selenium Grid用于测试并行执行的工具Selenium 1.0的工作原理如图5.1所示。 图5.1Selenium 1.0的工作原理 Selenium具有如下优势: (1) 适合Web应用的测试,直接运行在浏览器上,所见即所得。 (2) 跨平台,支持多操作系统,如Windows、Linux等。(3) 支持多种脚本语言,如Java、Python等。 1. Selenium IDE Selenium IDE 开发测试脚本的集成开发环境,是嵌入到Firefox浏览器中的一个插件,可以录制/回放用户的基本操作,生成测试用例,运行单个测试用例或测试用例集。 Selenium IDE 具有如下特点: 安装简单,使用方便。 可以对一般网页进行录制和回放。 能够进行断点回放和速度控制。 可以方便导出各种类型的脚本。 脚本可以转换成多种语言。 2. Selenium RC Selenium RC(Remote Control)支持多种不同语言编写的自动化测试脚本,将Selenium RC的服务器作为代理服务器去访问应用,从而达到测试的目的。 Selenium RC包括两部分: Client Libraries和Selenium Server。Client Libraries库提供各种编程语言的客户端驱动来编写测试脚本,用来控制Selenium Server的库。Selenium Server负责控制浏览器行为。 3. Selenium Grid Selenium Grid用于分布式测试,实现在异构环境中的测试。测试环境由一个主节点和若干个代理节点组成。主节点用来管理各个代理节点的注册和状态信息,接受远程客户端的代码请求,将请求的命令转发到代理节点执行。使用Selenium Grid远程执行测试代码与直接调用Selenium Server一样,只是环境启动的方式不一样,需同时启动一个主节点和至少一个代理节点。 4. Selenium WebDriver 2007年,WebDriver诞生,它的设计理念是将端到端测试与底层具体的测试工具隔离,并采用设计模式Adapter适配器来达到目标。Selenium 2.0其实是Selenium 1.0和WebDriver的合并,即Selenium 2.0=Selenium 1.0+WebDriver。 WebDriver作为自动化测试框架,现已成为业内公认的浏览器UI测试的标准实现。 5.2Selenium IDE〖*2〗5.2.1环境搭建Selenium IDE有如下两个版本: (1) 如果使用Selenium IDE 2.9.1,需要卸载系统的Firefox新版本(同时删除%AppData%/Mozilla/Firefox/Profiles文件夹),然后运行提供的绿色火狐浏览器。 (2) Selenium IDE 3.0 以上不提供导出功能,用最新的katalon插件能更方便进行脚本录制回放和导出(界面和使用与Selenium IDE 基本相同)。 Selenium IDE环境的搭建步骤如下所示: 打开Firefox浏览器,按“工具”→“附件组件”→“获取添加组件”菜单顺序找到插件安装页面,在搜索栏输入selenium ide进行搜索,选择selenium ide进行安装,如图5.2所示。 图5.2Selenium IDE的安装 安装成功后重启Firefox,“工具”菜单栏下显示Selenium IDE菜单项,如图5.3所示。 图5.3Selenium IDE安装成功 打开Selenium IDE,进入Selenium IDE主页面,如图5.4所示。 图5.4Selenium IDE主页面 5.2.2录制 Selenium IDE的录制步骤如下所示。 步骤1: 启动Firefox浏览器,输入网址www.baidu.com。 步骤2: 从工具菜单中打开Selenium IDE,Base URL中将默认为www.baidu.com,如图5.5所示。 图5.5录制功能 步骤3: 在Firefox中操作,在百度中输入Selenium IDE,操作行为会被Selenium IDE转化为相应的命令,出现在Table框中,每一条都由三部分组成: Command(命令,如单击click);Target(目标,即命令的作用对象,如单击选中的按钮);Value(值,如输入框中的文本字符串),如图5.6所示。 图5.6录制过程 步骤4: 在Selenium IDE主页面单击Base URL输入框右下方的红色按钮,停止录制。停止录制后,Selenium IDE的Source框中有类似HTML的脚本,即是录制过程中生成的测试脚本,用于回放。录制脚本默认生成HTML语言,也可打开Options→Format菜单,选生成其他语言脚本,如Java/C#/Python/Perl/Php/Ruby等。录制的脚本要通过“文件”中的功能菜单来保存,如图5.7所示。 图5.7录制功能 5.2.3回放 在Selenium IDE主页面单击“运行脚本”按钮,开始回放后,在Firefox浏览器中Selenium IDE自动回放先前录制的动作,如图5.8所示。 图5.8回放功能 回放过程如图5.9所示。 图5.9回放过程 5.3Selenium WebDriver〖*2〗5.3.1环境搭建安装完Python和Anaconda之后,Selenium WebDriver的安装具有如下方式: 方式1: 在Anaconda Prompt下使用命令pip install U selenium,命令及运行结果如图5.10所示。 图5.10安装Selenium 方式2: 在命令提示符下使用命令: pip install selenium / pip3 install selenium5.3.2浏览器连接 不同的浏览器,如IE、Chrome、Firefox等,WebDriver需要不同的驱动程序来连接。需要下载相应的驱动程序。 1. IE浏览器 在 IE浏览器中WebDriver驱动程序的下载网址是http://docs.seleniumhq.org/download,页面如图5.11所示。 图5.11下载IE Driver Server页面 下载文件起名为IEDriverServer.exe,保存在C:\\。 【例5.1】在IE浏览器中测试。__author__='Administrator' fromselenium import webdriver import unittest class VisitSogouByIE(unittest.TestCase): def setUp(self): self.driver=webdriver.Ie(executable_path="C:\\\\IEDriverServer") def test_visitSogou(self): self.driver.get("http://www.sogou.com") print(self.driver.current_url) def tearDown(self): self.driver.quit() if __name__=='__main__': unittest.main()2. Chrome浏览器 在Chrome浏览器中WebDriver驱动程序的下载网址是http://chromedriver.storage.googleapis.com/index.html,页面如图5.12所示。下载文件起名为ChromeDriverServer.exe,保存在C:\\。 图5.12下载Chrome Driver Server页面 注意: Chrome浏览器的版本要和驱动程序的版本相对应,见网址https://blog.csdn.net/yoyocat915/article/details/80580066(2018 Selenium Chrome版本与Chrome Driver兼容版本对照表)。 【例5.2】在Chrome浏览器中测试。__author__='Administrator' fromselenium import webdriver import unittest class VisitSogouByChrome(unittest.TestCase): def setUp(self): self.driver=webdriver. Chrome(executable_path="C:\\\\ ChromeDriverServer") def test_visitSogou(self): self.driver.get("http://www.sogou.com") print(self.driver.current_url) def tearDown(self): self.driver.quit() if __name__=='__main__': unittest.main()3. Firfox浏览器 在Firfox浏览器中,WebDriver驱动程序的下载网址是https://github.com/mozilla/geckodriver/releases,页面如图5.13所示。下载文件起名为geckodriver.exe,保存在C:\\。 图5.13下载geckodriver页面【例5.3】在Firefox浏览器中测试。__author__='Administrator' fromselenium import webdriver import unittest class VisitSogouByFirefox(unittest.TestCase): def setUp(self): self.driver=webdriver. Firefox (executable_path="C:\\\\geckodriver") def test_visitSogou(self): self.driver.get("http://www.sogou.com") print(self.driver.current_url) def tearDown(self): self.driver.quit() if __name__=='__main__': unittest.main()5.3.3模拟用户操作 WebDriver 模拟用户操作有Selenium 自身操作和通过动作链执行模拟操作两种方式。 方式1: Selenium自身操作。 命令如下所示:send_keys(theKey)其中,参数theKey是 send_keys模块的变量值,取值如表5.2所示。表5.2参数theKey取值 模拟键盘按键说明send_keys(Keys.BACK_SPACE)删除键send_keys(Keys.SPACE)空格键send_keys(Keys.TAB)制表键send_keys(Keys.ESCAPE)回退键send_keys(Keys.ENTER)回车键send_keys(Keys.CONTROL,'a')全选(Ctrl+A)send_keys(Keys.CONTROL,'c')复制(Ctrl+C)send_keys(Keys.CONTROL,'x')剪切(Ctrl+X)send_keys(Keys.CONTROL,'v')粘贴(Ctrl+V)send_keys(Keys.F1……Fn)键盘上的F1,…,Fn键