Selenium2自动化测试实战基于Python语言》读书笔记--第2章
第2章 测试环境搭建
2.1 Windows下的环境搭建
Python 2 or Python 3?
书中是选择使用了Python 3,我个人是选择了适合当前产品的Python 2,大家各自看吧。
2.1.1 安装Python
根据操作系统选择对应版本进行安装即可,不再赘述。
2.1.2 安装setuptools与pip
setuptools是Python Enterprise Application Kit(PEAK)的一个副项目,它是Python的distutilsde工具的增强工具,可以让程序猿更方便地创建和发布Python包,特别是那些对其他包有依赖性的状况。
当需要安装第三方Python包时,经常会使用easy_install命令,其实该命令是由PEAK开发的setuptools包里带的一个简易安装命令,因此使用easy_install时实际上是在调用setuptools来完成安装模块的工作。
pip是一个安装和管理Python包的工具, 通过pip来安装Python包变得十分简单,省去了搜索-查找版本-下载-安装等繁琐的过程。pip的安装依赖于setuptools,所以在安装pip之前需要先安装setuptools。
2.1.3 安装Selenium
通过pip命令可以直接安装Selenium:pip install selenium
当只输入包名称则默认安装最新的版本,当然也可以指定版本号安装:pip install selenium==2.48.0
查看安装的包的版本信息:pip show selenium
2.1.4 安装ActivePython
ActivePython是由ActiveState公司推出的Python专用编程和调试工具。
ActivePython包含完整的Python内核,集成pip包管理工具,提供IDLE,以及WindowsAPIs服务等,总之非常完善,只是不开源,但可以免费使用。
Ps:本人使用的是Python2.7,所以下载的ActivePython也是针对此版本的。
2.2 Ubuntu下的环境搭建
Ubuntu自身对Python的依赖性较强,所以都是自带Python,同时包含2和3两个版本。
setuptools与pip已经存在于Ubuntu的软件仓库中,可以直接使用apt-get命令进行安装:
<span style="color:#000000"><code>sudo apt-get install python3-setuptools
sudo apt-get install python3-pip</code></span>
- 1
- 2
安装Selenium:pip install selenium
2.3 使用IDLE编写Python
IDLE(Integrated Development Environment,集成开发环境)
Alt+P:回退到上一次编辑的代码
Alt+N:前进到下一次编辑的代码
2.4 编写第一个自动化脚本
baidu.py
<span style="color:#000000"><code class="language-python"><span style="color:#880000"># -*- coding:utf-8 -*-</span>
<span style="color:#000088">from</span> selenium <span style="color:#000088">import</span> webdriver
driver = webdriver.Firefox()
driver.get(<span style="color:#009900">"https://www.baidu.com"</span>)
driver.find_element_by_id(<span style="color:#009900">"kw"</span>).send_keys(<span style="color:#009900">"Selenium2"</span>)
driver.find_element_by_id(<span style="color:#009900">"su"</span>).click()
driver.quit()</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
对上述代码进行解释:
# -*- coding:utf-8 -*-
防止乱码问题,以及方便地在程序中添加中文注释,把编码统一成UTF-8,在Python2时代,这个基本是必须的,但是到了Python3时代就不那么重要了。
from selenium import webdriver
导入WebDriver包,才能使用WebDriver API进行自动化脚本开发。
driver=webdriver.Firefox()
把webdriver的Firefox对象赋值给变量driver,只有获得了浏览器对象后,才可以启动浏览器,打开网址,操作页面元素,Firefox浏览器去掉默认已经在Selenium WebDriver包里了,可以直接调用,如果是使用IE或者Chrome浏览器则需要安装驱动才行。
driver.get("https://www.baidu.com")
获得浏览器对象后,通过get()方法,可以向浏览器发送网址URL。
driver.find_element_by_id("kw").send_keys("Selenium2")
关于页面元素的定位在后面会相吸介绍,这里是通过id=kw,定位到百度的输入框,并通过键盘输入方法send_keys()向百度输入框里输入“Selenium2”搜索关键字。
driver.find_element_by_id("su").click()
这一步通过id=su定位“百度一下”搜索按钮,并向搜索按钮发送单击事件click()。
driver.quit()
退出并关闭浏览器及相关的驱动程序。
这里在实际运行中遇到了一个问题,当执行该脚本时,出现了错误提示:
<span style="color:#000000"><code>selenium.common.exceptions.WebDriverException: <span style="color:#000088">Message</span>: <span style="color:#009900">'geckodriver'</span> executable needs <span style="color:#000088">to</span> be <span style="color:#000088">in</span> PATH.</code></span>
- 1
在网上搜了一下,发现是Firefox高版本需要使用 geckodriver 来驱动,不再使用Selenium默认自带的Firefox webdriver。
需要在下面这个地址下载 geckodriver 并将其放在系统环境变量PATH目录里即可:
https://github.com/mozilla/geckodriver/releases
这里我是直接把下载到的文件放在了Python的安装目录里,再次运行脚本发现还有错误,这次错误简单了,就是无法访问网页,这个查自己的主机发现是访问百度出了点问题,修改一下DNS就解决了。
不过还有个问题: 整个过程,很快,就是打开浏览器,输入百度地址搜索关键字,然后浏览器就关闭了,根本没截到图,要想截到图,就得注释掉driver.quit()
这句,效果就出来了:
2.5 安装浏览器驱动
WebDriver支持:
- Firefox(FirefoxDriver)
- IE(InternetExplorerDriver)
- Opera(OperaDriver)
- Chrome(ChromeDriver)
- Android(AndroidDriver)
- iPhone(IPhoneDrvier)
各个驱动的下载地址:http://www.seleniumhq.org/download/
操作步骤就是下载对应驱动,将驱动文件放在Path环境变量目录下即可。
2.6 不同编程语言下使用WebDriver
W3C(万维网联盟)对WebDriver做定义和规范:http://www.w3.org/TR/webdriver/
WebDriver:是一个远程控制界面,支持反省和用户代理的控制权。它提供了一个独立于系统平台和编程语言的线协议(Wire Protocol)作为一种远程进程程序指示Web浏览器的行为。
- Java中引入Selenium WebDriver实现自动化测试
<span style="color:#000000"><code class="language-java"><span style="color:#000088">package</span> com.test.<span style="color:#000088">case</span>;
<span style="color:#880000">//添加Selenium(webdiver)引用</span>
<span style="color:#000088">import</span> org.openqa.selenium.By;
<span style="color:#000088">import</span> org.openqa.selenium.WebDriver;
<span style="color:#000088">import</span> org.openqa.selenium.firefox.*;
<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">BaiduTest</span> {
<span style="color:#000088">public</span> <span style="color:#000088">static</span> <span style="color:#000088">void</span> <span style="color:#009900">main</span>(String[] args){
WebDriver driver = <span style="color:#000088">new</span> FirefoxDriver();
driver.get(<span style="color:#009900">"https://www.baidu.com"</span>);
driver.findElement(By.id(<span style="color:#009900">"kw"</span>)).sendKeys(<span style="color:#009900">"selenium2"</span>);
driver.findElement(By.id(<span style="color:#009900">"su"</span>)).click();
driver.quit();
}
}</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- Ruby中引入Selenium WebDriver实现自动化测试
<span style="color:#000000"><code class="language-ruby"><span style="color:#880000">#导入Selenium(webdriver)包</span>
<span style="color:#000088">require</span> <span style="color:#009900">'selenium-webdriver'</span>
driver = <span style="color:#009900">Selenium::WebDriver</span>.<span style="color:#000088">for</span> <span style="color:#006666">:firefox</span>
driver.navigate.to <span style="color:#009900">"https://www.baidu.com"</span>
driver.find_element(<span style="color:#006666">:id</span>, <span style="color:#009900">'kw'</span>).send_keys <span style="color:#009900">"selenium2"</span>
driver.find_element(<span style="color:#006666">:id</span>, <span style="color:#009900">'su'</span>).click()
driver.quit</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
虽然在不同语言中语法上有差异,不过共同点都是:
- 首先导入Selenium(webdriver)模块
- 调用Selenium的浏览器驱动,获取浏览器句柄(driver)并启动浏览器
- 通过句柄访问百度URL
- 通过句柄操作页面元素(百度输入框和按钮)
- 通过句柄关闭浏览器
2.7 总结
本章主要是介绍了selenium的一些概念、安装、简单示例、浏览器驱动、不同语言的支持。
内容并不复杂,主要是实操上与书中取得一致效果,对selenium有个初步的轮廓上的认识即可。