WebDriver 说明文档

Selenium webdriver 

注意:我们目前正在编写这些部分的文档。我们相信这里的信息是准确的,但请注意我们仍然在编写本章。我们将提供更多信息,这将使本章更加扎实。

1. webdriver 简介 

Selenium 2.0的主要新功能是集成WebDriver API。除了解决Selenium-RC API中的一些限制之外,WebDriver还旨在提供更简单,更简洁的编程接口。Selenium-WebDriver的开发是为了更好地支持动态网页,页面元素可能会在不重新加载页面的情况下发生变化。WebDriver的目标是提供精心设计的面向对象的API,为现代高级Web应用程序测试问题提供改进的支持。

2. 与Selenium-RC相比,WebDriver如何“驱动”浏览器?

Selenium-WebDriver使用每个浏览器对自动化的本机支持直接调用浏览器。如何进行这些直接调用,以及它们支持的功能取决于您使用的浏览器。有关每个“浏览器驱动程序”的信息将在本章后面提供。

对于熟悉Selenium-RC的人来说,这与你习惯的完全不同。Selenium-RC以相同的方式为每个支持的浏览器工作。它在浏览器加载时将“javascript函数”注入浏览器,然后使用其javascript在浏览器中驱动AUT。WebDriver不使用此技术。同样,它使用浏览器内置的自动化支持直接驱动浏览器。

3. WebDriver和Selenium- Server

您可能需要也可能不需要Selenium Server,具体取决于您打算如何使用Selenium-WebDriver。如果您的浏览器和测试都在同一台机器上运行,并且您的测试只使用WebDriver API,那么您不需要运行Selenium-Server; WebDriver将直接运行浏览器。

有一些原因可以将Selenium-Server与Selenium-WebDriver一起使用。

  • 您正在使用Selenium-Grid在多台计算机或虚拟机(VM)上分发测试。
  • 您希望连接到具有特定浏览器版本但不在当前计算机上的远程计算机。
  • 您没有使用Java绑定(即Python,C#或Ruby),并且希望使用HtmlUnit Driver

4. Selenium-WebDriver项目设置

安装Selenium意味着在开发中设置项目,以便您可以使用Selenium编写程序。如何执行此操作取决于您的编程语言和开发环境。

4.1 Java

设置Selenium 2.0 Java项目的最简单方法是使用Maven。Maven将下载java绑定(Selenium 2.0 java客户端库)及其所有依赖项,并将使用maven pom.xml(项目配置)文件为您创建项目。完成此操作后,您可以将maven项目导入首选IDE,IntelliJ IDEA或Eclipse。

首先,创建一个包含Selenium项目文件的文件夹。然后,要使用Maven,您需要一个pom.xml文件。这可以使用文本编辑器创建。我们不会详细介绍pom.xml文件或使用Maven,因为已经有很好的参考资料。你的pom.xml文件看起来像这样。在为项目创建的文件夹中创建此文件。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"

                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        <modelVersion>4.0.0</modelVersion>

        <groupId>MySel20Proj</groupId>

        <artifactId>MySel20Proj</artifactId>

        <version>1.0</version>

        <dependencies>

            <dependency>

                <groupId>org.seleniumhq.selenium</groupId>

                <artifactId>selenium-server</artifactId>

                <version>3.0.1</version>

            </dependency>

        </dependencies></project>

请务必指定最新版本。在撰写本文时,上面列出的版本是最新版本,但在Selenium 2.0发布后会立即发布。检查当前版本的Maven下载页面并相应地编辑上述依赖项。

现在,从命令行,CD进入项目目录并运行maven,如下所示。

mvn clean install

这将下载Selenium及其所有依赖项,并将它们添加到项目中。

最后,将项目导入首选开发环境。对于那些不熟悉这一点的人,我们提供了一个显示这一点的附录。

将maven项目导入IntelliJ IDEA。 将maven项目导入Eclipse。

4.2 C#

从Selenium 2.2.0开始,C#绑定作为一组已签名的dll与其他依赖dll一起分发。在2.2.0之前,所有Selenium dll都是未签名的。要在项目中包含Selenium,只需从http://selenium-release.storage.googleapis.com/index.html下载最新的selenium-dotnet zip文件。如果您使用的是Windows Vista或更高版本,则应在解压缩之前解锁zip文件:右键单击zip文件,单击“属性”,单击“取消阻止”,然后单击“确定”。

解压缩zip文件的内容,并在Visual Studio(或您选择的IDE)中为每个解压缩的dll添加对项目的引用。

官方NuGet包: RC WebDriver WebDriverBackedSelenium 支持

4.3 Python

如果您使用Python进行测试自动化,那么您可能已经熟悉使用Python进行开发。要将Selenium添加到Python环境,请从命令行运行以下命令。

pip install selenium

皮普要求PIP进行安装,PIP也有依赖setuptools的。

教学Python开发本身超出了本文档的范围,但是Python上有许多资源,组织中的开发人员可能会帮助您加快速度。

4.4 Ruby

如果您使用Ruby进行测试自动化,那么您可能已经熟悉Ruby的开发。要将Selenium添加到Ruby环境,请从命令行运行以下命令。

gem install selenium-webdriver

教学Ruby开发本身超出了本文档的范围,但是Ruby上有许多资源,组织中的开发人员可能会帮助您加快速度。

4.5 Perl

Perl绑定由第三方提供,请参阅有关如何安装/入门的任何文档。在撰写本文时,有一个已知的Perl绑定。

4.6 PHP 

PHP绑定由第三方提供,请参阅有关如何安装/入门的任何文档。目前有三种已知的绑定:由Chibimagic By Lukasz Kolczynski和Facebook

4.7 JavaScript

如果您使用node.js开发应用程序,则selenium项目会在npm上提供Javascript绑定。

使用npm安装Javascript绑定:

npm install selenium-webdriver

您可以在此处找到API文档。

5. 从Selenium 1.0迁移

对于已经使用Selenium 1.0编写测试套件的用户,我们提供了有关如何将现有代码迁移到Selenium 2.0的提示。Selenium 2.0的首席开发人员Simon Stewart撰写了一篇关于从Selenium 1.0迁移的文章。我们已将此作为附录。

从Selenium RC迁移到Selenium WebDriver

6. 通过实施例引入硒的webdriver API 

WebDriver是一种用于自动化Web应用程序测试的工具,尤其是用于验证它们是否按预期工作。它旨在提供一个易于探索和理解的友好API,比Selenium-RC(1.0)API更易于使用,这将有助于使您的测试更易于阅读和维护。它不依赖于任何特定的测试框架,因此它可以在单元测试项目中使用,也可以从普通的“主”方法中使用。本节介绍WebDriver的API,帮助您开始熟悉它。首先,如果您还没有设置WebDriver项目。这在上一节“ 设置Selenium-WebDriver项目”中有所描述。

设置项目后,您可以看到WebDriver的行为与任何普通库一样:它完全是自包含的,您通常不需要记住在使用它之前启动任何其他进程或运行任何安装程序,而不是使用Selenium-RC到代理服务器。

注意:使用ChromeDriver,Opera Driver,Android Driver 和iOS Driver需要执行其他步骤

你现在准备写一些代码了。一个简单的入门方法就是这个例子,它在Google上搜索术语“Cheese”,然后将结果页面的标题输出到控制台。

 

package org.openqa.selenium.example;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.support.ui.ExpectedCondition;

import org.openqa.selenium.support.ui.WebDriverWait;

public class Selenium2Example  {

    public static void main(String[] args) {

        // Create a new instance of the Firefox driver

        // Notice that the remainder of the code relies on the interface,

        // not the implementation.

        WebDriver driver = new FirefoxDriver();

 

        // And now use this to visit Google

        driver.get("http://www.google.com");

        // Alternatively the same thing can be done like this

        // driver.navigate().to("http://www.google.com");

 

        // Find the text input element by its name

        WebElement element = driver.findElement(By.name("q"));

 

        // Enter something to search for

        element.sendKeys("Cheese!");

 

        // Now submit the form. WebDriver will find the form for us from the element

        element.submit();

 

        // Check the title of the page

        System.out.println("Page title is: " + driver.getTitle());

        

        // Google's search is rendered dynamically with JavaScript.

        // Wait for the page to load, timeout after 10 seconds

        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {

            public Boolean apply(WebDriver d) {

                return d.getTitle().toLowerCase().startsWith("cheese!");

            }

        });

 

        // Should see: "cheese! - Google Search"

        System.out.println("Page title is: " + driver.getTitle());

        

        //Close the browser

        driver.quit();

    }}

    

在接下来的部分中,您将了解有关如何将WebDriver用于浏览器历史记录中向前和向后导航以及如何测试使用框架和窗口的网站等内容的更多信息。我们还提供了更全面的讨论和示例。

7. Selenium-WebDriver API命令和操作

7.1 获取页面

您可能想要使用WebDriver做的第一件事是导航到页面。执行此操作的常规方法是调用“get”:

 

driver.get("http://www.google.com");

    

根据几个因素,包括OS /浏览器组合,WebDriver可能会也可能不会等待页面加载。在某些情况下,WebDriver可能会在页面完成,甚至开始加载之前返回控件。为确保稳健性,您需要使用显式和隐式等待等待页面中存在的元素 。

7.2 定位UI元素(WebElements)

WebDriver中的定位元素可以在WebDriver实例本身或WebElement上完成。每个语言绑定都公开“查找元素”和“查找元素”方法。前者返回与查询匹配的WebElement对象,如果找不到这样的元素,则抛出异常。后者返回WebElements列表,如果没有DOM元素与查询匹配,则可能为空。

“查找”方法采用名为“By”的定位器或查询对象。“按”策略列在下面。

7.2.1 按 ID

这是定位元素的最有效和首选方法。UI开发人员常见的陷阱是在页面上具有非唯一ID或自动生成id,两者都应该避免。html元素上的类比自动生成的id更合适。

如何查找如下所示元素的示例:

<div id="coolestWidgetEvah">...</div>

 

WebElement element = driver.findElement(By.id("coolestWidgetEvah"));

    

7.2.2 按类名

在这种情况下,“类”是指DOM元素上的属性。通常在实际使用中有许多具有相同类名的DOM元素,因此找到多个元素变得比找到第一个元素更实用。

如何查找如下所示元素的示例:

<div class="cheese"><span>Cheddar</span></div><div class="cheese"><span>Gouda</span></div>

 

List<WebElement> cheeses = driver.findElements(By.className("cheese"));

    

7.2.3 按标签名称

DOM标签元素的名称。

如何查找如下所示元素的示例:

<iframe src="..."></iframe>

 

WebElement frame = driver.findElement(By.tagName("iframe"));

    

7.2.4 按名称

找到具有匹配name属性的input元素。

如何查找如下所示元素的示例:

<input name="cheese" type="text"/>

 

WebElement cheese = driver.findElement(By.name("cheese"));

    

7.2.5 按链接文字

找到具有匹配可见文本的链接元素。

如何查找如下所示元素的示例:

<a href="http://www.google.com/search?q=cheese">cheese</a>>

 

WebElement cheese = driver.findElement(By.linkText("cheese"));

    

7.2.6 通过部分链接文本

找到部分匹配可见文本的链接元素。

如何查找如下所示元素的示例:

<a href="http://www.google.com/search?q=cheese">search for cheese</a>>

 

WebElement cheese = driver.findElement(By.partialLinkText("cheese"));

    

7.2.7 通过XPath

就像名字暗示它是css的定位策略。默认情况下使用本机浏览器支持,因此请参阅w3c css选择器以获取通常可用的css选择器列表。如果浏览器没有css查询的本机支持,则使用Sizzle。IE 6,7和FF3.0目前使用Sizzle作为css查询引擎。

请注意,并非所有浏览器都是相同的,一些可能在一个版本中工作的CSS可能在另一个版本中不起作用。

找到下面的奶酪的例子:

<div id="food"><span class="dairy">milk</span><span class="dairy aged">cheese</span></div>

 

WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy.aged"));

    

7.2.8 通过CSS

在较高的层次上,WebDriver尽可能使用浏览器的本机XPath功能。在那些没有本机XPath支持的浏览器上,我们提供了自己的实现。除非您了解各种XPath引擎中的差异,否则这可能会导致一些意外行为。

驱动

标签和属性名称

属性值

本机XPath支持

HtmlUnit驱动程序

小写

因为它们出现在HTML中

是

Internet Explorer驱动程序

小写

因为它们出现在HTML中

没有

Firefox驱动程序

不区分大小写

因为它们出现在HTML中

是

这是一个小抽象,所以对于下面的HTML:

<input type="text" name="example" /><INPUT type="text" name="other" />

 

List<WebElement> inputs = driver.findElements(By.xpath("//input"));

    

将找到以下匹配数

XPath表达式

HtmlUnit驱动程序

Firefox驱动程序

Internet Explorer驱动程序

//输入

1(“例子”)

2

2

// INPUT

0

2

0

有时HTML元素不需要显式声明属性,因为它们将默认为已知值。例如,“input”标记不需要“type”属性,因为它默认为“text”。在WebDriver中使用xpath时的经验法则是,您不应期望能够匹配这些隐式属性。

7.2.9 使用JavaScript 

您可以执行任意javascript来查找元素,只要返回DOM元素,它就会自动转换为WebElement对象。

加载jQuery的页面上的简单示例:

 

WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('.cheese')[0]");

   

查找页面上每个标签的所有输入元素:

 

List<WebElement> labels = driver.findElements(By.tagName("label"));List<WebElement> inputs = (List<WebElement>) ((JavascriptExecutor)driver).executeScript(

    "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +

    "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);

   

7.3 获取文本值

人们通常希望检索元素中包含的innerText值。这将返回单个字符串值。请注意,这只会返回页面上显示的可见文本。

 

WebElement element = driver.findElement(By.id("elementID"));element.getText();

   

7.4 用户输入 - 填写表单

我们已经看过如何在textarea或text字段中输入文本,但其他元素呢?您可以“切换”复选框的状态,也可以使用“单击”设置选择的OPTION标记。处理SELECT标签也不错:

 

WebElement select = driver.findElement(By.tagName("select"));List<WebElement> allOptions = select.findElements(By.tagName("option"));for (WebElement option : allOptions) {

    System.out.println(String.format("Value is: %s", option.getAttribute("value")));

    option.click();}

   

这将在页面上找到第一个“SELECT”元素,并依次遍历每个OPTION,打印出它们的值,然后依次选择每个OPTION。正如您将注意到的,这不是处理SELECT元素的最有效方法。WebDriver的支持类包括一个名为“Select”的支持类,它提供了与这些类进行交互的有用方法。

 

Select select = new Select(driver.findElement(By.tagName("select")));select.deselectAll();select.selectByVisibleText("Edam");

  

这将从页面上的第一个SELECT中取消选择所有OPTION,然后选择显示“Edam”文本的OPTION。

填写完表单后,您可能想要提交表单。一种方法是找到“提交”按钮并单击它:

 

driver.findElement(By.id("submit")).click();

    

或者,WebDriver在每个元素上都有“提交”的便捷方法。如果在表单中的元素上调用它,WebDriver将向上走DOM,直到找到封闭的表单,然后调用submit。如果元素不在表单中,那么NoSuchElementException将抛出:

 

element.submit();

    

7.5 Windows和Frames之间跳转

某些Web应用程序具有许多帧或多个窗口。WebDriver支持使用“switchTo”方法在命名窗口之间移动:

 

driver.switchTo().window("windowName");

    

所有调用driver现在将被解释为定向到特定窗口。但你怎么知道窗口的名字?看一下打开它的javascript或链接:

<a href="somewhere.html" target="windowName">Click here to open a new window</a>

或者,您可以将“窗口句柄”传递给“switchTo()。window()”方法。知道这一点,就可以迭代每个打开的窗口,如下所示:

 

for (String handle : driver.getWindowHandles()) {

    driver.switchTo().window(handle);}

   

您还可以从一帧切换到另一帧(或切换到iframe):

 

driver.switchTo().frame("frameName");

    

7.6 弹出对话框

从Selenium 2.0 beta 1开始,内置支持处理弹出对话框。触发打开弹出窗口的操作后,您可以使用以下命令访问警报:

 

Alert alert = driver.switchTo().alert();

    

这将返回当前打开的警报对象。使用此对象,您现在可以接受,关闭,读取其内容,甚至可以键入提示。此界面在警报,确认和提示方面同样有效。有关更多信息,请参阅JavaDocs 或RubyDocs。

7.7 导航:历史和位置

之前,我们介绍了使用“get”命令(driver.get("http://www.example.com")或driver.Url="http://www.example.com"在C#中)导航到页面 。正如您所见,WebDriver具有许多较小的,以任务为中心的界面,导航是一项有用的任务。因为加载页面是一个基本要求,所以这样做的方法存在于主WebDriver接口上,但它只是一个同义词:

 

driver.navigate().to("http://www.example.com");

    

重申:“ navigate().to()”和“ get()”做同样的事情。一个人比另一个人更容易打字!

“导航”界面还提供了在浏览器历史记录中前后移动的功能:

 

driver.navigate().forward();driver.navigate().back();

   

请注意,此功能完全取决于底层浏览器。如果您习惯于一个浏览器的行为而不是另一个浏览器,那么当您调用这些方法时,可能会发生意外情况。

7.8 Cookies

在我们离开这些后续步骤之前,您可能有兴趣了解如何使用cookie。首先,您需要在cookie有效的域上。如果您在开始与网站交互之前尝试预设Cookie并且您的主页很大/需要一段时间来加载替代方法是在网站上找到一个较小的网页(通常404页面很小,例如http:// example .com / some404page)。

 

// Go to the correct domaindriver.get("http://www.example.com");

// Now set the cookie. This one's valid for the entire domainCookie cookie = new Cookie("key", "value");driver.manage().addCookie(cookie);

// And now output all the available cookies for the current URLSet<Cookie> allCookies = driver.manage().getCookies();for (Cookie loadedCookie : allCookies) {

    System.out.println(String.format("%s -> %s", loadedCookie.getName(), loadedCookie.getValue()));}

// You can delete cookies in 3 ways// By namedriver.manage().deleteCookieNamed("CookieName");// By Cookiedriver.manage().deleteCookie(loadedCookie);// Or all of themdriver.manage().deleteAllCookies();

   

7.9 更改用户代理

使用Firefox驱动程序很容易:

 

FirefoxProfile profile = new FirefoxProfile();profile.addAdditionalPreference("general.useragent.override", "some UA string");WebDriver driver = new FirefoxDriver(profile);

   

7.10拖放

这是使用Actions类执行拖放的示例。需要启用本机事件。

 

WebElement element = driver.findElement(By.name("source"));WebElement target = driver.findElement(By.name("target"));

(new Actions(driver)).dragAndDrop(element, target).perform();

   

8. 驱动程序细节和权衡

9. Selenium-WebDriver的驱动程序

WebDriver是应该编写测试的关键接口的名称,但有几个实现。这些包括:

9.1 HtmlUnit驱动程序

这是目前WebDriver最快,最轻量级的实现。顾名思义,这是基于HtmlUnit。HtmlUnit是一个基于Java的WebBrowser实现,没有GUI。对于任何语言绑定(除了java),Selenium Server都需要使用此驱动程序。

用法

 

WebDriver driver = new HtmlUnitDriver();

   

专业

  • WebDriver的最快实现
  • 纯Java解决方案,因此它与平台无关。
  • 支持JavaScript
  • 模拟其他浏览器的JavaScript行为(见下文)

缺点

JavaScript中的驱动程序的HtmlUnit 

没有一种流行的浏览器使用HtmlUnit(Rhino)使用的JavaScript引擎。如果您使用HtmlUnit测试JavaScript,结果可能与这些浏览器有很大不同。

当我们说“JavaScript”时,我们实际上是指“JavaScript和DOM”。虽然DOM是由W3C定义的,但每个浏览器都有自己的怪癖和DOM实现的差异以及JavaScript与它的交互方式。HtmlUnit有一个令人印象深刻的完整DOM实现,并且对使用JavaScript有很好的支持,但它与任何其他浏览器没什么不同:它有自己的怪癖和W3C标准和主要浏览器的DOM实现的差异,尽管它能够模仿其他浏览器。

使用WebDriver,我们必须做出选择; 我们是否启用了HtmlUnit的JavaScript功能,并冒着团队遇到问题的风险,这些问题只会在那里出现,或者我们是否禁用了JavaScript,因为我们知道有越来越多的网站依赖JavaScript?我们采用了保守的方法,默认情况下在使用HtmlUnit时禁用了支持。随着WebDriver和HtmlUnit的每个版本的发布,我们会重新评估这个决定:我们希望在某些时候默认在HtmlUnit上启用JavaScript。

启用JavaScript 

如果您迫不及待,启用JavaScript支持非常简单:

 

HtmlUnitDriver driver = new HtmlUnitDriver(true);

   

这将导致HtmlUnit驱动程序默认模拟Firefox 3.6的JavaScript处理。

9.2 Firefox驱动程序

使用Firefox插件控制Firefox浏览器。使用的Firefox配置文件从机器上安装的内容中删除,仅包含Selenium WebDriver.xpi(插件)。默认情况下也会更改一些设置(请参阅源代码以查看哪些设置)Firefox驱动程序能够运行并在Windows,Mac,Linux上进行测试。目前在版本3.6,10,最新 - 1,最新

用法

 

WebDriver driver = new FirefoxDriver();

   

专业

缺点

修改Firefox配置文件

假设您想要修改用户代理字符串(如上所述),但是您有一个包含许多有用扩展的Firefox配置文件。有两种方法可以获取此配置文件。假设使用Firefox的配置文件管理器()创建了配置文件:firefox -ProfileManager

 

ProfilesIni allProfiles = new ProfilesIni();FirefoxProfile profile = allProfiles.getProfile("WebDriver");profile.setPreferences("foo.bar", 23);WebDriver driver = new FirefoxDriver(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驱动程序中开发功能时,我们会公开使用它们的能力。例如,在我们认为Firefox for Linux上的本机事件稳定之前,默认情况下会禁用它们。要启用它们:

 

FirefoxProfile profile = new FirefoxProfile();profile.setEnableNativeEvents(true);WebDriver driver = new FirefoxDriver(profile);

  

信息

有关最新信息,请参阅Wiki页面中的Firefox部分。

9.3 Internet Explorer驱动程序

InternetExplorerDriver是一个独立的服务器,它实现了WebDriver的有线协议。此驱动程序已在适用于Vista,Windows 7,Windows 8和Windows 8.1的组合上使用IE 7,8,9,10和11进行了测试。截至2014年4月15日,不再支持IE 6。

该驱动程序支持运行32位和64位版本的浏览器。选择如何确定在启动浏览器时使用哪个“bit-ness”取决于启动IEDriverServer.exe的版本。如果启动32位版本的IEDriverServer.exe,将启动32位版本的IE。同样,如果启动64位版本的IEDriverServer.exe,将启动64位版本的IE。

用法

 

WebDriver driver = new InternetExplorerDriver();

   

专业

  • 在真实的浏览器中运行并支持Javascript
  • 显然InternetExplorerDriver只能在Windows上运行!
  • 比较慢(虽然还很漂亮!)

缺点

信息

有关最新信息,请参阅Wiki页面的Internet Explorer部分。请特别注意“必需配置”部分。

9.4 ChromeDriver 

ChromeDriver由Chromium 项目iteslf 维护/支持。WebDriver通过chromedriver二进制文件与Chrome一起使用(可在chrome项目的下载页面上找到)。您需要安装chromedriver和Chrome浏览器版本。chromedriver需要放在系统路径的某个位置,以便WebDriver自动发现它。Chrome浏览器本身是由chromedriver在默认安装路径中发现的。这两者都可以被环境变量覆盖。 有关更多信息,请参阅Wiki。

用法

 

WebDriver driver = new ChromeDriver();

   

专业

  • 在真实的浏览器中运行并支持JavaScript
  • 由于Chrome是基于Webkit的浏览器,ChromeDriver可能允许您验证您的网站是否可以在Safari中使用。请注意,由于Chrome使用自己的V8 JavaScript引擎而不是Safari的Nitro引擎,因此JavaScript执行可能会有所不同。
  • 比HtmlUnit驱动程序慢

缺点

信息

有关最新信息,请参阅我们的维基。更多信息也可以在下载页面上找到

使用ChromeDriver运行

下载ChromeDriver可执行文件, 然后按照Wiki页面上的其他说明进行操作

9.5 Opera驱动程序

有关使用Opera驱动程序的信息,请参阅Selenium Wiki中的Opera Driver wiki文章。

9.6 iOS驱动

查看ios-driver或appium项目。

9.7 Android驱动

查看Selendroid项目

10.备用后端:混合WebDriver和RC技术

10.1 WebDriver-Backed Selenium- 

Web版本的WebDriver提供了Selenium-RC API的实现。这意味着您可以使用Selenium-RC API使用底层WebDriver技术。这主要是为了向后兼容。它允许那些使用Selenium-RC API的现有测试套件的人使用WebDriver。它旨在帮助简化到Selenium-WebDriver的迁移路径。此外,这允许在同一测试代码中并排使用这两个API。

Selenium-WebDriver使用如下:

 

// You may use any WebDriver implementation. Firefox is used here as an exampleWebDriver driver = new FirefoxDriver();

// A "base url", used by selenium to resolve relative URLs

 String baseUrl = "http://www.google.com";

// Create the Selenium implementationSelenium selenium = new WebDriverBackedSelenium(driver, baseUrl);

// Perform actions with selenium

selenium.open("http://www.google.com");selenium.type("name=q", "cheese");selenium.click("name=btnG");

// Get the underlying WebDriver implementation back. This will refer to the// same WebDriver instance as the "driver" variable above.WebDriver driverInstance = ((WebDriverBackedSelenium) selenium).getWrappedDriver();

//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance//instead of calling driver.quit(). Otherwise, the JVM will continue running after//the browser has been closed.selenium.stop();

专业

  • 允许WebDriver和Selenium API并排使用
  • 为从Selenium RC API到WebDriver的托管迁移提供了一种简单的机制
  • 不需要运行独立的Selenium RC服务器
  • 不实现每个方法
  • 更高级的Selenium使用(使用“browserbot”或Selenium Core的其他内置JavaScript方法)可能无效
  • 由于底层实现差异,某些方法可能会更慢

缺点

10.2 Backing webdriver with Selenium 

WebDriver不支持与Selenium RC一样多的浏览器,因此为了在使用WebDriver API时提供支持,您可以使用 SeleneseCommandExecutor

使用以下代码以这种方式支持Safari(确保禁用弹出窗口阻止):

 

DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setBrowserName("safari");CommandExecutor executor = new SeleneseCommandExecutor(new URL("http://localhost:4444/"), new URL("http://www.google.com/"), capabilities);WebDriver driver = new RemoteWebDriver(executor, capabilities);

目前这种方法存在一些主要限制,特别是findElements不能按预期工作。此外,由于我们使用Selenium Core来驱动浏览器,因此您受限于JavaScript沙箱。

11. 运行独立的Selenium Server以与RemoteDrivers一起使用

从Selenium的下载页面下载selenium-server-standalone- <version> .jar和可选的IEDriverServer。如果您打算使用Chrome,请从Google Code下载。

解压缩IEDriverServer和/或chromedriver并将它们放在$ PATH /%PATH%上的目录中 - 然后Selenium Server应该能够处理IE / Chrome的请求而无需进行其他修改。

使用命令行启动服务器

java -jar <path_to>/selenium-server-standalone-<version>.jar

如果要使用本机事件功能,请在命令行上使用该选项指明此功能

-Dwebdriver.enable.native.events=1

对于其他命令行选项,请执行

java -jar <path_to>/selenium-server-standalone-<version>.jar -help

为了正常运行,应允许以下端口进入TCP连接:4444,7054-5(或者是您计划运行的并发实例数的两倍)。在Windows下,您可能还需要取消阻止应用程序。

12. 其他资源

您可以在WebDriver的wiki中找到WebDriver的更多资源

当然,不要犹豫在任何Selenium主题上进行互联网搜索,包括Selenium-WebDriver的驱动程序。Selenium上有很多博客以及各种用户论坛上的大量帖子。此外,Selenium用户组是一个很好的资源。http://groups.google.com/group/selenium-users

13. 后续步骤

本章简单介绍了WebDriver及其一些关键功能的高级演练。熟悉Selenium-WebDriver API之后,您将需要了解如何在AUT的功能经常更改时构建测试套件,以实现可维护性,可扩展性和降低的脆弱性。大多数Selenium专家现在推荐的方法是使用页面对象设计模式以及可能的页面工厂来设计测试代码。Selenium-WebDriver通过在Java和C#中提供PageFactory类来为此提供支持。在下一章中将介绍这些以及其他高级主题 。此外,对于此技术的高级描述,您可能需要查看“ 测试设计注意事项”一章。这两章都介绍了通过使测试代码更加模块化来编写更易维护的测试的技术。

posted @ 2018-11-26 16:46  缘来就是你  阅读(1233)  评论(0)    收藏  举报