核心实验:Selenium WebDriver->基础使用
Selenium 2.0最主要的新特性就是集成了Webdriver API。设计Webdriver的初衷是提供更加简单明了的接口来弥补Selenium-RC API的不足。在动态网页中,通常只会更新局部的Html元素,Webdriver会很好的帮助用户快速定位这些元素。我们最终的目的是通过提供精心设计的面向对象API来解决现代高级网页中的测试难题。
实 验 简 介
Selenium 2.0最主要的新特性就是集成了Webdriver API。设计Webdriver的初衷是提供更加简单明了的接口来弥补Selenium-RC API的不足。在动态网页中,通常只会更新局部的Html元素,Webdriver会很好的帮助用户快速定位这些元素。我们最终的目的是通过提供精心设计的面向对象API来解决现代高级网页中的测试难题。
WebDriver是一套操作HTML元素的标准接口。它是基于浏览器内核API完成对象识别,这是WebDriver的一个鲜明特点。任何一个浏览器,内核是它核心的部分,包括整个界面的渲染、对象的结构以及它的处理等等,这都是内核来完成的。所以WebDriver通过浏览器的内核来完成对象的识别,它的兼容性、可靠性会更好,同时它的运行速度也会更高。
实 验 目 的
(1)理解WebDriver的基础使用,并在Python中完成测试脚本开发。
(2)理解针对不同浏览器的Driver的通信原理和基于内核的实现手段。
(3)掌握Selenium WebDriver运行于Firefox浏览器中的注意事项。
实 验 流 程
1.下载安装Selenium
第一种:直接在https://www.seleniumhq.org/download/下载压缩包(如Selenium-3.13.0.tar.gz);这种方式在包中含有一个setup.py的安装文件,只需要通过Python去运行该文件就可以完成安装。
(1)将此目录拷贝到Python安装路径的’..\Python35-32\Lib\site-packages’目录下。这里文件存在位置可以任意。但一定要记住解压后文件存放位置。
(2)打开命令行cmd,进入到此目录下,用Python命令执行目录内的setup.py脚本。如图5-1所示。
当然,只要知道setup.py文件路径,也可以通过Python 路径/setup.py install的方式来安装。
(3)显示如下信息,则安装成功。如图所示。
注意:如果脚本中导入Selenium时仍然显示红色的语法错误,重启下PyCharm即可。
第二种方式:通过cmd下pip install的方式安装,即pip install selenium。只是此方法需要注意版本问题,如果需要安装指定版本第三方库,就需要在文件名后面加上版本号(如pip install Selenium == 2.53.2),如图所示。如果安装过程缓慢,也可以在进行pip安装时指定国内镜像,如:
(1).pip install selenium -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
(2).pip install selenium –i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com
第三种方式:可以直接在网上下载对应版本号的.exe的可执行程序,在window环境下直接点击完成安装。
2.下载对应版本的浏览器
无论下载的Selenium是什么版本,都需要注意两点,对应的浏览器版本和驱动程序版本。
2.53版本为最后的2.X版本,2.0时代由此结束。从2.47版本开始,Selenium必须使用Java 7,但是官方更推荐使用Java 8。同时,从2.52版本开始,弱化了平台之间的限制,并且开始支持64位(Weakening platform restriction to enable 64-bit support)。
对于2.x自带Firefoxdriver来说,我们需要把Firefox浏览器的版本限制在47以下。而IE浏览器我们一般使用的是9到11。如果需要使用IE,还需要下载对应版本的IEDriverServer.。
同理chrome浏览器也和IE一样,都需要下载对应版本的驱动程序chromedriver。
经过10年的等待,终于发布了Selenium3,针对Selenium2,API没有什么变化,所以2.x版本的代码,实际上是可以拿到3.x中运行的,但Selenium 3.x中移除了2.x中自带的Firefox驱动库,而需要重新下载针对新版本(57+)的geckodriver.exe程序。且在实例化驱动对象时需要指明浏览器路径以及驱动程序路径。
这里提供一个不同版本各类常用浏览器的下载地址:
https://www.slimjet.com/chrome/google-chrome-old-version.php
3.driverServer下载
Selenium 2及后面更新的Selenium3都是针对各个浏览器而开发的,它取代了嵌入到被测Web应用中的 JavaScript。与浏览器的紧密集成,支持创建更高级的测试,避免了JavaScript安全模型的限制。除了来自浏览器厂商的支持,Selenium 3 还利用操作系统级的调用模拟用户输入。WebDriver 支持
Firefox(geckodriver)、IE(InternetExplorerDriver)、Opera(OperaDriver)、Chrome (ChromeDriver)以及safari(SafariDriver)它还支持Android(Selendroid)和iPhone(Appium)的移动应用测试。
此外,Selenium 2还包括基于HtmlUnit的无界面实现,称为HtmlUnitDriver,和基于webkit的无界面浏览器phantomjs。Selenium 2 API可以通过Java、C#、PHP、Python、Perl、Ruby等编程语言访问,支持开发人员使用他们常用的编程语言来创建测试。
针对不同的浏览器和不同的浏览器版本,可以在下面找到对应的驱动包。下面提供常用浏览器驱动包下载地址:
IE:http://selenium-release.storage.googleapis.com/index.html?path=3.13/
chrome:http://npm.taobao.org/mirrors/chromedriver/
4.实例完成第一个测试脚本
Selenium安装成功后,现在我们来完成一个简单的测试脚本,以确保整个过程运行通过,没有明显的问题。请按照如下步骤完成:
from selenium import webdriver import time \firefox.exe",executable_path=r'C:\Users\zhou\Desktop\geckodriver.exe') #等待2秒 time.sleep(2) #等待2秒 time.sleep(2) |
执行上面代码,可以看到搜索结果如图 。
实际上,代码所做的操作和手工是一模一样,就我们所看到的过程来说,两者没有任何区别,即自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。
5.webdriver常用API
通过前面的学习和了解,我们对Selenium webdriver有了基本的认识,简而言之,webdriver就是一个强大的UI操作仓库,里面封装了各种各样对web元素的操作,这对我们进行UI自动化测试提供了极大的便利。
浏览器的操作
webdriver通过调用浏览器内核来定位操作页面元素,使用很方便。但是另外一方面,它也有比较麻烦的一点在于,他需要针对不同的浏览器开发不同的内核驱动程序。针对不同的浏览器,WebDriver要引入不同的驱动程序。正是因为这样的设计,看似在开发过程中,WebDriver的开发过程会麻烦些,因为它要为不同的浏览器提供Driver。但是在用户使用的过程中就会很方便。
每个浏览器都有不同的内核和不同的Driver共同协作来完成,所以任何一个Driver都是针对特定的一个浏览器来开发的。但是无论是什么样的浏览器,WebDriver都提供了一个统一的标准的访问接口,所以我们的代码完全可以轻易做到一次开发,到处运行的效果。这也非常方便于我们测试Web系统的前端兼容性问题。所以,利用WebDriver,我们可以很好地完成对功能和兼容方面的自动化测试。
那么,使用webdriver如何操作浏览器,将是下面我们需要讲解的重点。目前Selenium webdriver已经更新至3.x版本,前面已经说过这个版本和当前使用的2.x版本最大的不同是取消第三方库内自带的firefox的driver包。需要重新去下载一个叫geckodriver的火狐驱动。
由于webdriver需要不同的driver来驱动不同的浏览器,这里统一使用Firefox来演示。
1. 打开、关闭页面与浏览器窗口大小设置。
(1)打开页面使用driver.get(url)方法,需要注意的是参数url需要指明协议类型(如http)
(2)设置浏览器窗口大小,第一种:driver.maxmize_window(),全屏显示;第二种:driver.set_window_size(300,300),设置窗口大小为300像素宽和300像素高
(3)关闭页面有两种方式,第一种:driver.close(),此方式仅仅关闭当前操作页面;第二种:driver.quit(),此方法是关闭所有通过webdriver打开的页面
from Selenium import webdriver #引入webdriver #实例化Firefox 的driver对象 driver = webdriver.Firefox(firefox_binary=r"C:\Program Files (x86)\Mozilla Firefox \firefox.exe") #如果将geckodriver放入当前包内,可以不再指定驱动路径 driver.get(‘http://www.baidu.com’) #通过对象打开Firefox浏览器并加载百度首页 driver.maxmize_window() #全屏显示 #driver.set_window_size(300,300) #指定显示窗口大小300x300 driver.close() #关闭页面 #driver.quit() #关闭页面 |
前进、后退和刷新
在操作页面时,有可能会遇到需要回退上一个页面或返回最新打开的页面,这个就会涉及到前进和后退了,如图所示。
在webdriver中提供两个方法,分别来解决前进和回退问题的,back()和forward()
from Selenium import webdriver #引入webdriver #实例化Firefox 的driver对象 driver = webdriver.Firefox(firefox_binary=r"C:\Program Files (x86)\Mozilla Firefox\firefox.exe") driver.get(‘http://localhost:8080/WoniuSales/goods’) #打开蜗牛进销存 driver.back() #后退 driver.forward() #前进 driver.refresh() #刷新 |
思 考 练 习
(1)对比一下手写WebDriver代码和通过Selenium IDE自动生成的代码之间的差别。