译Selenium 20 WebDriver.docx

上传人:b****3 文档编号:4423402 上传时间:2022-12-01 格式:DOCX 页数:14 大小:24.42KB
下载 相关 举报
译Selenium 20 WebDriver.docx_第1页
第1页 / 共14页
译Selenium 20 WebDriver.docx_第2页
第2页 / 共14页
译Selenium 20 WebDriver.docx_第3页
第3页 / 共14页
译Selenium 20 WebDriver.docx_第4页
第4页 / 共14页
译Selenium 20 WebDriver.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

译Selenium 20 WebDriver.docx

《译Selenium 20 WebDriver.docx》由会员分享,可在线阅读,更多相关《译Selenium 20 WebDriver.docx(14页珍藏版)》请在冰豆网上搜索。

译Selenium 20 WebDriver.docx

译Selenium20WebDriver

【译】Selenium2.0WebDriver

SeleniumWebDriver

 

注意:

我们正致力于完善帮助指南的每一个章节,虽然这个章节仍然存在需要完善的地方,不过我们坚信当前你看到的帮助信息是精确无误的,后续我们会提供更多的指导信息来完善帮助文档。

 

 

1.WebDriver介绍

Selenium2.0最主要的新特性就是集成了WebDriverAPI。

我们设计WebDriver的初衷是提供更加简单明了的接口来弥补Selenium-RCAPI的不足。

在动态网页中,通常只会更新局部的html元素,WebDriver会很好的帮助用户快速定位这些元素。

我们最终的目的是通过提供精心设计的面向对象API来解决现代高级网页中的测试难题。

2.WebDriver如何驱动浏览器?

与Selenium-RC有什么区别?

不同类型的浏览器都会有原生的接口支持自动化操作,Selenium通过这些接口直接向浏览器发送指令。

如何发送这些指令取决于你当前使用的浏览器类型,我们将在这一章节后面来详细介绍。

看上去WebDriver与之前Selenium-RC的实现方式类似,实际上两者之间存在着本质的区别。

对于所有类型的浏览器Selenium-RC都是使用的同一种方法:

当浏览器启动时,向其中注入javascript,从而使用这些js来驱动浏览器中的AUT(ApplicationUnderTest)。

WebDriver并没有使用这种技术,它是通过调用浏览器原生的自动化API直接驱动浏览器。

3.WebDriver与SeleniumServer

是否需要是用SeleniumServer取决于你使用WebDriver的方式。

以下两种情况不需要使用SeleniumServer,WebDriver直接运行浏览器即可:

1、testcases仅仅使用了Webdriver的API;2、浏览器和testcase在同一台PC上,而且testcases仅仅使用了Webdriver的API。

以下三种情况你需要结合SeleniumServer来使用WebDriver:

1)使用Selenium-Grid管理集群环境(或者虚拟机)上的testcase;

2)需要调用非本机上的不同版本的浏览器;

3)未使用任何languagebinding(java/c#/python/ruby),且有意向使用HtmlUnitDriver。

4.配置Selenium-WebDriver工程

安装Selenium是指在开发环境上配置一个工程,然后可以在这个工程中用Selenium编写程序。

如何配置取决于你使用的开发语言和编程环境。

 

使用Maven是配置一个Selenium2.0java工程最简单的方式。

Maven会下载所有javabingdings以及所有相关的库(theSelenium2.0javaclientlibrary)。

通过使用pom.xml(maven配置文件)来新建工程,你可以根据自己的喜好将Maven工程导入IntelliJIDEA或者Eclipse。

首先,创建一个文件夹存放Maven工程文件。

然后,创建pom.xml,你可以使用texteditor来编辑。

鉴于已经有很多关于“如何在Maven工程中使用pom.xml”优秀的参考文献,这里将不再过多的讨论相关细节。

下面给出一个示例,为你的工程也创建一个类似的文件。

 

xmlversion="1.0"encoding="UTF-8"?

>

//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.0http:

//maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

MySel20Proj

MySel20Proj

1.0

org.seleniumhq.selenium

selenium-java

2.38.0

com.opera

operadriver

com.opera

operadriver

1.5

org.seleniumhq.selenium

selenium-remote-driver

请确认你使用的WebDriver是最新的当前版本。

在这篇文档撰写时,上述示例给出的是最新的版本。

在Selenium2.0发布不久WebDriver就有过频繁的更新。

请在这个链接MavenDownloadPage确认当前的版本,相应地修改你工程中的pon.xml。

现在,你可以通过dos界面使用CD命令进入工程所在文件夹,通过以下命令运行Maven。

 

mvncleaninstall

 

运行之后会自动下载Selenium及相关套件,并加载到你的工程中去。

最后,将你的工程导入到你偏好的IDE中。

如果你对导入的过程不是很清楚,我们已经准备了操作指南。

ImportingamavenprojectintoIntelliJIDEA.ImportingamavenprojectintoEclipse

5.如何将自动化工程从Selenium1.0迁移到Selenium2.0

已经在Selenium1.0上构建测试工程的用户,我们为您提供了一份指导如何将已有的代码迁移到Selenium2.0。

Selenium2.0的首席开发工程师SimonStewart为此撰写了一片文章:

MagratingFromSeleniumRCtoSeleniumWebDriver。

6.Selenium-WebDriverAPI简介

WebDriver可以用来实现Web应用程序的自动化测试,特别适合于验证实际结果是否符合预期结果的场景。

WebDriver旨在提供比Selenium1.0更加易用、友好的API,便于用户的探索和理解,从而使测试用例变得容易阅读和维护。

WebDriver没有使用任何第三方测试框架,所以它可以很好与单元测试工具或者最古老的main函数结合使用。

本章节将介绍如何使用WebDriver的API,帮助你慢慢开始了解WebDriver。

如果你还没有新建一个Selenium工程,请先完成这个操作,在这个章节的上面有详细的描述。

 

当你创建完Selenium工程后,你会发现WebDriver和普通的第三方库一样是完全独立的,在你使用之前不需要启动任何额外的进程或者安装程序,相反如果你使用Selenium-RC需要先启动代理服务器。

 

注意:

当你使用如下WebDriver时需要额外的步骤:

ChromeDriver,OperaDriver,AndroidDriver,IPhoneDriver。

 

现在你肯定跃跃欲试要写一些代码了。

我们以一个简单的例子来开始第一段旅程:

在Google上搜索“Cheese”,并打印出搜索结果网页的标题。

 

packageorg.openqa.selenium.example;

importorg.openqa.selenium.By;

importorg.openqa.selenium.WebDriver;

importorg.openqa.selenium.WebElement;

importorg.openqa.selenium.firefox.FirefoxDriver;

importorg.openqa.selenium.support.ui.ExpectedCondition;

importorg.openqa.selenium.support.ui.WebDriverWait;

publicclassSelenium2Example{

publicstaticvoidmain(String[]args){

//创建一个FirefoxDriver实例

//这个类依赖于接口而不是接口的实现

WebDriverdriver=newFirefoxDriver();

//使用get方法访问Google

driver.get("");

//使用下面这个方法也能够达到访问Google的目的

//driver.navigate().to("");

//找到html输入框的name

WebElementelement=driver.findElement(By.name("q"));

//输入要查找的内容

element.sendKeys("Cheese!

");

//提交表单,WebDriver会自动找到我们需要提交的元素所在的表单

element.submit();

//打印网页的标题

System.out.println("Pagetitleis:

"+driver.getTitle());

//Google的搜索网页会通过JS动态渲染

//等待页面加载完毕,超时时间为10秒

(newWebDriverWait(driver,10)).until(newExpectedCondition(){

publicBooleanapply(WebDriverd){

returnd.getTitle().toLowerCase().startsWith("cheese!

");

}

});

//控制台上将打印如下信息:

"cheese!

-GoogleSearch"

System.out.println("Pagetitleis:

"+driver.getTitle());

//关闭浏览器

driver.quit();

}

}

在本章节的接下来篇幅,我们将学习如何使用WebDriver操作你的浏览器,如何使用框架和窗口来测试Web网站。

当然,我们将提供更加翔实的论述和举例。

 

7.Selenium-WebDriverAPI详解

7.1获取Web页面

我们第一件要做的事是通过WebDriver取得Web页面的控制权,一般情况下使用get方法

driver.get("");

在某些情况下,比如操作系统和浏览器的穿插组合,WebDriver有可能不会等待Web页面加载完成,这种情况下WebDriver会返回错误或者直接运行下一步操作。

为了保证程序的健壮性,你需要等待页面中某个元素加载完成后再进行下一步操作,请参考ExplicitandImplicitWaits。

 

7.2定位UI元素

我们可以通过WebDriver实例或者WebElement类来定位UI元素。

我们为每种编程语言都提供了两种方法:

“FindElement”和“FindElements”。

第一种方法返回的一个WebElement,找不到则抛出异常。

第二个方法返回一个WebElement链表(List),在找不到任何DOM元素的情况下会返回空的链表。

Find方法会使用类似探测器的类,类名叫做By。

下面列举By的一些常用方法:

 

ByID

当我们定位一个UI元素,这个是最有效也是最好的方法。

不过这个方法不是万能的,有的前端开发在设计UI元素时会遗漏ID或者使用动态ID,这两种情况下都要避免使用这个方法。

这时候使用获取class名称方法比ByID更合适。

示例:

如何使用该方法定位元素

...

WebElementelement=driver.findElement(By.id("coolestWidgetEvah"));

 

ByClassName

在这种场景下,我们引用DOM元素的属性。

实际情况是很多元素都有一样的ClassName,因此找到多个有相同ClassName的元素,比找到第一个拥有这个ClassName的元素来的更重要。

示例:

如何使用该方法定位元素

 

Cheddar

Gouda

Listcheeses=driver.findElements(By.className("cheese"));

ByTagName

 

DOM元素Tag的名称。

示例:

如何使用该方法定位元素

 

WebElementframe=driver.findElement(By.tagName("iframe"));

ByName

 

找到与Name属性相同的Input元素。

示例:

如何使用该方法定位元素

 

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

ByLinkText

 

找到与Text属性精确匹配的超链接。

示例:

如何使用该方法定位元素

 

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

ByPartialLinkText

 

找到与Text属性模糊匹配的超链接。

示例:

如何使用该方法定位元素

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

ByCSS

这个方法名称意味着它是一个CSS探测器。

前提是浏览器默认支持这种方法,建议根据W3C的标准文档构建CSS选择器。

如果浏览器不支持CSS选择器,可以使用Sizzle。

IE6,7和FireFox3.0就是使用Sizzle作为CSS查询引擎。

 

注意不是所有浏览器都使用同样的CSS选择器表达式,有些CSS可能只在某一个版本中生效。

示例:

如何使用该方法定位元素

 

milkcheese

WebElementcheese=driver.findElement(By.cssSelector("#foodspan.dairy.aged"));

ByXPath

当有需要时,WebDriver还可以使用浏览器自带的XPATH。

对于那些不支持XPATH的浏览器,我们提供了WebDriver特有的实现方式。

请确保熟悉XPATH在不同的引擎中的区别,否则会导致一些不可预料的问题。

Driver

大小写敏感

属性值是否可见

是否支持XAPTH

HtmlUnitDriver

仅识别小写

可见

IEDriver

仅识别小写

可见

FireFoxDiver

大小写不敏感

可见

上面的表格有一些抽象,让我们来看个例子

 

Listinputs=driver.findElements(By.xpath("//input"));

匹配结果如下

 

XPATH表达式

HtmlUnitDriver

FireFoxDriver

IEDriver

//input

1

2

2

//INPUT

0

2

0

有些标签的属性有默认值,这种情况下不指定属性值则匹配默认值。

比如,"input"标签"type"属性默认为"text"。

使用XPATH的首要原则就是不要忽略这些隐藏的实现。

使用JavaScript

只要返回的是一个WebElement,你还可以使用任意的JS代码查找Web元素,根据查询结果会自动修改为一个WebElement对象。

一个简单的使用jQuery的例子:

 

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

查找页面中每个label的所有Input元素:

 

 

Listlabels=driver.findElements(By.tagName("label"));

Listinputs=(List)((JavascriptExecutor)driver).executeScript(

"varlabels=arguments[0],inputs=[];for(vari=0;i

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

 

 

7.3模拟用户输入行为

我们已经演示了在文本框输入文本内容,其他Web元素应该如何操作呢?

你可以触发CheckBox的某个选项,也可以选择Select的某个选项。

WebDriver处理Select元素也很简单。

WebElementselect=driver.findElement(By.tagName("select"));

ListallOptions=select.findElements(By.tagName("option"));

for(WebElementoption:

allOptions){

System.out.println(String.format("Valueis:

%s",option.getAttribute("value")));

option.click();

}

上面的例子,将选择Web页面中的第一个Select元素,并将循环打印出选项的取值并单击选项。

或许你已经注意到,使用这个方法并不是最有效的。

WebDriver提供一个“Select”类,这个类的方法更适合于处理上述这种场景。

Selectselect=newSelect(driver.findElement(By.tagName("select")));

select.deselectAll();

select.selectByVisibleText("Edam");

上面的例子,首先去除选定第一个选项的焦点,然后选中取值为"Edam"的选项。

一旦你完成了所有表单字段的输入,下一步就是提交表单。

一种方法就是找到Web页面中的Submit按钮并单击:

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

作为另一种选择,WebDriver的Element类有一个更加便利的方法"sublmit"。

如果你对表单中的某个Element使用该方法,WebDriver将会走读其所在的DOM对象,直到找到其所属的表单,并提交。

如果该Element并不在某个表单中,将会抛出异常NoSuchElementException。

element.submit();

7.4在windows和frames间切换

 

有些Web程序包含许多Frame和窗口,WebDriver提供"switchto"方法在这之间进行切换:

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

所有传输给WebDriver的指定将被传输给切换后的窗口。

如何直到窗口的名称呢?

查看JS并打开该窗口就可以了:

Clickheretoopenanewwindow

作为另一种选择,你可以使用一个“窗口句柄”传递给"switchTo().window()"方法。

根据此方法,将会使用迭代器遍历所有打开的窗口:

for(Stringhandle:

driver.getWindowHandles()){

driver.switchTo().window(handle);

}

你也可以在Frame之间切换(或者进入Frame):

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

你还可以根据路径使用Frame的子Frame,而且可以通过索引定位Frame。

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

以上方法将切换到名称为“frameName”的Frame的第一个子Frame,所有Frame都是Web页面的最顶端开始计数。

 

7.5弹出框

 

Selenium2.0beta1版本,我们提供方法获取弹出框。

在你触发弹出框的操作后,你可以用一下方法进入弹出框:

Alertalert=driver.swit

展开阅读全文
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1