Selenium用户指南 - 第四章 Selenium 2.0和WebDriver[2]
?
?
WebDriver驱动器入门
WebDriver是编写测试使用的关键的接口名称,有几个实现。包括:
HtmlUnit驱动器
这个是目前最快和最轻量级的WebDriver实现。正如名称所指示的,这是基于HtmlUnit的。HtmlUnit是一个基于Java的、无GUI的Webbrowser实现。对任何语言绑定(除了Java),要求Selenium服务器使用这个驱动器。
用法
WebDriver driver = new HtmlUnitDriver();
优点
- WebDriver的最快实现
- 纯Java解决方案,因此是平台无关的
- 支持Javascript
缺点
- 模拟其他浏览器的Javascript行为(参加下面)
在HtmlUnit驱动器中的Javascript
流行的浏览器中没有一个使用,由HtmlUnit(Rhino)使用的Javascript引擎。如果你使用HtnlUnit测试Javascript,结果可能和其他浏览器产生的结果差别很大。
当我们说“Javascript”时,我们实际上意味着“Javascript和DOM”。虽然DOM是由W3C定义的,但每个浏览器在DOM的实现和Javascript如何与之交互上,有它自己的怪异和差别。HtmlUnit有一个令人难忘的DOM的完整实现,以及对使用Javascript的良好支持。但和其他的浏览器没有差别的是:它也有自己的怪异和差别,与W3C的标准以及其他主要浏览器的DOM实现,而不管它模拟其他浏览器的能力。
使用WebDriver,我们必须作出一个选择;是使能HtmlUnit的Javascript能力,而冒着团队遇到问题的风险,还是保持Javascript无效,尽管知道有越来越多的浏览器依赖于Javascript?我们采用保守的方法,当我们使用HtmlUnit时,默认不支持。随WebDriver和HtmlUnit的每个发布,我们重新评估这个决定:在某个时刻,我们希望使能Javascript在HtmlUnit。
使能Javascript
如果你不能等待,使能Javascript支持是非常容易的。
HtmlUnitDriver driver = new HtmlUnitDriver(true);
这将引起HtmlUnit驱动器默认地模拟Firefox 3.6的Javascript处理。
Firefox驱动器
使用一个Firefox插件控制Firefox浏览器。从在机器上安装中剥离使用的Firefox Profile,仅包含Selenium WebDriver.xpi(插件)。几个设置也默认地被改变(参见源代码看看做了哪些改变)。Firefox驱动器有能力运行在Windows,Mac,Linux,并已经测试在版本3.0,3.6,5,6,7和8上测试。
用法
WebDriver driver = new FirefoxDriver();
优点
- 运行在一个真正的浏览器并支持Javascript
- 比Internet Explorer驱动器更快
缺点
- 比HtmlUnit驱动器慢
修改Firefox Profile
假定你希望修改用户代理串(如上所示),你必须修改包含成打的有用的扩展的Firefox Profile。有两种方法可以得到这个Profile。假定那个Profle已经使用Firefox的Profile管理员创建(firefox -ProfileManager)。
ProfileIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("WebDriver");
profile.setPreferences("foo.bar", 23);
WebDriver driver = new FirefoxDriver(profile);
替代地,如果Profile还没有在Firefox注册:
File profileDir = new File("path/to/top/level/of/profile");
FirefoxProfile profile = new FirefoxProfile(profileDir);
profile.addAdditionalPreferences(extraPrefs);
WebDriver driver = new FirefoxDriver(profile);
当我们开发Firefox驱动器的功能的时候,我们暴露了使用它们的能力。例如,直到感觉Linux上的Firefox的本地事件已经稳定,默认无效它们。要使能它们:
FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
WebDriver driver = new FirefoxDriver(profile);
信息
参见wiki页的Firefox部分,以获得最新的信息。
Internet Explorer驱动器
这个驱动器使用一个动态链接库控制,因此只有在Windows OS可以使用。每一个Selenium的发布,它的核心功能已经在版本6,7,8在XP,以及版本9在Windows 7上经过测试
用法
WebDriver driver = new InternetExplorerDriver();
优点
- 运行在一个真实的浏览器,支持Javascript连同你的终端用户可见的所有怪异模式。
缺点
- 显然Internet Explorer驱动器仅仅工作在Windows操作系统!
?
- 比较而言速度慢(尽管仍然相当快)
- 在大多数版本XPath没有本地的支持。自动注入Sizzle比其他浏览器满很多,而且在同一个浏览器进行CSS选择器的比较时较慢。
- 在版本6和7CSS不被本地支持。替代注入Sizzle。
- 在IE8和9,CSS选择器是本地的,但这些浏览器不完全支持CSS3。
信息
参见wiki页的Internet Explorer部分,以获得最新的信息。请特别注意要求的配置(Required Configuration)部分。
Chrome驱动器
Chrome驱动器由Chromium项目自身维护和支持。WebDriver与Chrome一起工作,通过chromedriver二进制(可以在Chromium项目的下载页找到)。你需要有chromedriver和安装的chrome浏览器的一个版本。chromedriver需要防止在你的系统路径的某个地方,以便WebDriver可以自动地发现。Chrome浏览器本身由chromedriver在缺省的安装路径发现。两者可以由环境变量重写。请参考wiki以获得更多信息。
用法
WebDriver driver = new ChromeDriver();
优点
- 运行在真实的浏览器,并支持Javascript
- 因为Chrome是基于Webkit的浏览器,Chrome驱动器可能允许你验证工作在Safari的你的站点。注意因为Chrome使用它自己的V8 Javascript引擎,而不是Safari的Nitro引擎,Javascript的执行可能有差别。
缺点
- 比HtmlUnit驱动器慢
信息
参见我们的wiki为了最新的信息。更多的信息可以被发现在下载页。
开始运行使用Chrome驱动器。
下载Chrome驱动器可执行文件 ,然后遵循在wiki页的其他指令。
Opera驱动器
参见Opera驱动器的wiki文章,在Selenium wiki以获得关于使用Opera驱动器的信息。
iPhone驱动器
参见iPhone驱动器的wiki文章,在Selenium wiki以获得关于使用Mac iOS驱动器的信息。
Android驱动器
参见Android驱动器的wiki文章,在Selenium wiki以获得关于使用Android驱动器的信息。
? Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.
?