Selenium 是什么

Selenium是一个用于Web应用程序测试的工具,一个浏览器自动化测试框架。

Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Chrome,Opera等。

这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。

测试系统功能——创建回归测试检验软件功能和用户需求。

支持自动录制动作和自动生成C#、Java、Python、Perl、Ruby、NodeJS、PhantomJS等不同语言的测试脚本。

 

Selenium 发展历史

2004年,在ThoughtWorks 公司, 一个叫做Jason Huggins的程序员为了减少手工测试的工作, 自己写了一套Javascript库, 这套库可以进行页面交互, 并且可以重复的在不同浏览器上进行重复的测试操作。

这套库后来变为了Selenium Core. 为Selenium Remote Control (RC) 和Selenium IDE 提供了坚实的核心基础能力。

Selenium 的作用是划时代的,因为他允许你使用多种语言来控制浏览器。浏览器对JS的安全限制也对Selenium的发展带来了困扰,并且Web程序也越来越大,特性也越来越多,都对selenium的发展来说带来了不少困难。

2006年Google 的工程师Simon Stewart开启了一个叫做WebDriver的项目,此项目可以直接让测试工具使用浏览器和操作系统本身提供的方法, 借此来绕过JS环境的沙盒效应, WebDriver项目目标就是为了解决Selenium的痛处。

2008年北京奥运年会, Selenium 和 WebDriver 这两个项目进行了合并, Selenium 2.0 出现了,也就是大家说的WebDriver

 

Selenium 1和 WebDriver 的区别

WebDriver 是Selenium 1 的升级版本, 也可以理解为两个不同的产品

WebDriver 相比Selenium 1 来说可以更好地绕过JS的限制,API也更易于使用.

Selenium 1 比WebDriver 支持更多的浏览器

WebDriver 可以实现向下兼容Selenium 1 的脚本

 

1. Selenium可支持的【真实】浏览器驱动:

PC端驱动:firefox、safari、ie、chrome、opera driver

移动端驱动: Windows Phone、Selendroid、ios-driver、Appium  支持iphone、ipad、android、FirefoxOS【第三方】

safari、firefox 都是以插件形式驱动浏览器本身的;

ie、chrome都是通过二进制文件来驱动浏览器本身的;

这些driver都是直接启动并通过调用浏览器的底层接口来驱动浏览器的,因此具有最真实的用户场景模拟,主要用于进行web的兼容性测试使用。

 

2. selenium可支持的【伪浏览器】驱动:

HtmlUnit 、PhantomJS 

它们都不是真正的在浏览器、都没有GUI,而是具有支持html、js等解析能力的类浏览器程序

这些程序不会渲染出网页的显示内容,但是支持页面元素的查找、JS的执行等;

由于不进行css及GUI渲染,所以运行效率上会比真实浏览器要快很多,主要用在功能性测试上面。

htmlunit是Java实现的类浏览器程序,包含在selenium server中,无需驱动,直接实例化即可;其js的解析引擎是Rhino。

 

Selenium HtmlUnitDriver 多浏览器的支持

1、HtmlUnitDriver 

WebDriver包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver,即使用HtmlUnit时并不会打开真实的浏览器,而是在内存中执行代码,因此运行速度很快,但是对JavaScript的支持不够好,当页面上有复杂的JavaScript元素时,经常捕捉不到。 

Eclipse测试例子如下:

WebDriver driver = new HtmlUnitDriver(); 
driver.get("http://www.baidu.com"); 

WebElement element = driver.findElement(By.name("wd")); 
element.sendKeys("webdriver"); 
element.submit(); 

Thread.sleep(5000);
System.out.println("page title : " + driver.getTitle());  

运行成功时控制台会打印百度搜索页面标题“page title : webdriver_百度搜索”。 

 

2、Firefox 

WebDriver实现了FireFoxDriver,无需用户下载FireFoxDriver

优点:

FireFoxDriver对页面的自动化测试支持得比较好,很直观地模拟页面的操作,对JavaScript的支持也非常完善,基本上页面上做的所有操作FireFox Driver都可以模拟。 

缺点:

启动很慢,运行也比较慢,不过,启动之后Webdriver的操作速度虽然不快但还是可以接受的,建议不要频繁启动停止FireFoxDriver。 

使用Firefox浏览器,只需要设置WebDriver driver = new FirefoxDriver(),前提是你的Firefox被安装在默认的位置,最好软连接到/usr/bin/firefox

操作系统 Firefox默认安装位置 

Linux firefox (found using “which”) 

Mac /Applications/Firefox.app/Contents/MacOS/firefox 

Windows %PROGRAMFILES%\Mozilla Firefox\firefox.exe 

如果你的FireFox没有被安装在指定的位置,可以设置“webdriver.firefox.bin”来指定它的位置,java代码如下: 

System.setProperty(“webdriver.firefox.bin”,”thelocation of Firefox”); 

Eclipse测试例子如下: 

System.setProperty("webdriver.firefox.bin", "D:\Mozilla Firefox\firefox.exe"); 

WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.baidu.com"); 

WebElement element = driver.findElement(By.name("wd")); 
element.sendKeys("webdriver"); 
element.submit(); 

Thread.sleep(5000); 
System.out.println("page title : " + driver.getTitle()); 

 

3、Chrome 

webdriver没有实现chromedriver,要使用chrome浏览器需要自己下载chromedriver.exe

下载地址:http://code.google.com/p/chromedriver/downloads/list

这个程序是由Chrome团队提供的,你可以看做它是链接WebDriver和Chrome浏览器的桥梁。 

Eclipse例子如下: 

// 指定chromedriver的路径 
System.setProperty("webdriver.chrome.driver","D:\chromedriver\chromedriver.exe"); 

// chrome 没有安装在默认路径时,指定chrome.exe的路径 
System.setProperty("webdriver.chrome.bin","C:\Documents and Settings\gongjf\Local Settings\Application Data\Google\Chrome\Application\chrome.exe"); 

WebDriver driver = new ChromeDriver(); 
driver.get("http://mimvp.com"); 

 

4、IE 

webdriver要使用IE浏览器需要下载InternetExplorerDriver.exe

下载地址:http://code.google.com/p/selenium/downloads/list

根据浏览器的版本下载32位或者64位的driver。 

注意:需要将IE浏览器各个区域的保护模式设置的一样,要么全勾选,要么全不勾选,工具 —> Internet选项—> 安全。还需要将页面的缩放比例设置为100% 

优点:直观地模拟用户的实际操作,对JavaScript提供完善的支持。 

缺点:是所有浏览器中运行速度最慢的,并且只能在Windows下运行,对CSS以及XPATH的支持也不够好。 

Eclipse例子如下: 

// 设置IEDriverService.exe的路径;如果IE没有安装在默认目录,同样需要设置webdriver.ie.bin 
System.setProperty("webdriver.ie.driver","D:\iedriver\IEDriverServer.exe"); 

// 设置IEDriverService.exe的路径;如果IE没有安装在默认目录,同样需要设置webdriver.ie.bin 
WebDriver driver = new InternetExplorerDriver(); 
driver.get("http://www.mimvp.com");System.setProperty("webdriver.ie.driver","D:\iedriver\IEDriverServer.exe"); 

WebDriver driver = new InternetExplorerDriver(); 
driver.get("http://www.mimvp.com");

 

 

参考推荐:

Java + HtmlUnitDriver + Proxy 代理抓取网页

Python + Selenium2 + Chrome 爬取网页

Selenium2.0 Python 常用函数