介绍
Selenium
Selenium 是一个Web应用自动化测试工具集,可以在多个浏览器平台上执行测试用例。
Selenium包含以下几个工具:
- Selenium 1 (Selenium RC or Remote Control):Selenium 1的核心是一个JavaScript库,通过该库可以和浏览器中的页面进行交互。Selenium RC基于该库,可以使用多种语言开发测试用例,在多个浏览器平台上执行测试用例。
- Selenium 2 (Selenium WebDriver):Selenium 1基于JavaScript库,因此受限于浏览器对于JavaScript的安全限制,Selenium 1对于浏览器中的页面交互也存在着很多限制。Selenium 2基于WebDriver,而WebDriver基于浏览器和操作系统提供的原生方法,因此Selenium 2可以直接操作浏览器,避免了JavaScript的安全限制。Selenium 2也可以使用多种语言开发测试用例,在多个浏览器平台上执行测试用例。
- Selenium IDE:Selenium IDE是一个FireFox插件,可以记录用户操作并导出成可重复执行的脚本。
- Selenium-Grid:Selenium-Grid可以用来扩展Selenium RC,例如可以在不同的机器上并行执行测试用例。
由于存在较多限制,已不推荐使用Selenium RC,而推荐使用Selenium WebDriver。Selenium WebDriver支持的浏览器有:
- Google Chrome;
- Internet Explorer 6, 7, 8, 9, 10;
- Firefox;
- Safari;
- Opera;
- HtmlUnit;
- PhantomJS;
- Android;
- iOS。
PhantomJS
PhantomJS 是一个基于WebKit的JavaScript API,它原生支持各种Web标准,例如DOM解析、CSS选择器、JSON、Canvas、SVG等。PhantomJS可用于:
- 无GUI浏览器下的Web站点测试;
- 网页截屏;
- 基于DOM API访问和操作网页;
- 监控网页加载。
安装
Selenium
Selenium支持的语言有:
- Java;
- C#;
- Python;
- Ruby;
- PHP;
- Perl;
- JavaScript。
这里介绍Python Selenium包的安装。操作系统为Linux,并已安装Python 2.7.5和pip,直接使用pip安装Selenium:
pip install selenium
PhantomJS
下载PhantomJS的可执行包phantomjs-1.9.8-linux-x86_64.bz2,解压后将bin/phantomjs拷贝至/bin下即可。Shell中输入phantomjs可打开REPL,也可以使用phantomjs执行代码文件:
phantomjs hello.js
hello.js代码如下所示:1
2console.log('Hello, world!');
phantom.exit();
应用
基于Selenium+PhantomJS模拟浏览器访问网页,输入用户名和密码并点击登录按钮,网页HTML代码如下所示:1
2
3
4
5
6
7
8
9
10
11<tr>
<td>用户名:</td>
<td><input type="text" id="username" placeholder="用户名"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" id="password" placeholder="密码"></td>
</tr>
<tr>
<td colspan="2"><button id="logon">登录</button></td>
</tr>
Python代码如下所示:1
2
3
4
5
6
7
8
9
10# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(300)
driver.get('http://xxx.xxx.xxx.xxx/login.html')
driver.find_element_by_id('username').send_keys(u'username')
driver.find_element_by_id('password').send_keys(u'password')
driver.find_element_by_id('logon').click()