译Selenium 20 WebDriverWord文档下载推荐.docx
《译Selenium 20 WebDriverWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《译Selenium 20 WebDriverWord文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
鉴于已经有很多关于“如何在Maven工程中使用pom.xml”优秀的参考文献,这里将不再过多的讨论相关细节。
下面给出一个示例,为你的工程也创建一个类似的文件。
<
?
xmlversion="
1.0"
encoding="
UTF-8"
>
projectxmlns="
http:
//maven.apache.org/POM/4.0.0"
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
//maven.apache.org/POM/4.0.0http:
//maven.apache.org/xsd/maven-4.0.0.xsd"
<
modelVersion>
4.0.0<
/modelVersion>
<
groupId>
MySel20Proj<
/groupId>
artifactId>
/artifactId>
version>
1.0<
/version>
dependencies>
dependency>
org.seleniumhq.selenium<
selenium-java<
2.38.0<
/dependency>
com.opera<
operadriver<
/dependencies>
dependencyManagement>
1.5<
exclusions>
exclusion>
selenium-remote-driver<
/exclusion>
/exclusions>
/dependencyManagement>
/project>
请确认你使用的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<
Boolean>
(){
publicBooleanapply(WebDriverd){
returnd.getTitle().toLowerCase().startsWith("
cheese!
}
});
//控制台上将打印如下信息:
-GoogleSearch"
//关闭浏览器
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更合适。
示例:
如何使用该方法定位元素
divid="
coolestWidgetEvah"
...<
/div>
WebElementelement=driver.findElement(By.id("
ByClassName
在这种场景下,我们引用DOM元素的属性。
实际情况是很多元素都有一样的ClassName,因此找到多个有相同ClassName的元素,比找到第一个拥有这个ClassName的元素来的更重要。
divclass="
cheese"
span>
Cheddar<
/span>
Gouda<
List<
WebElement>
cheeses=driver.findElements(By.className("
ByTagName
DOM元素Tag的名称。
iframesrc="
..."
/iframe>
WebElementframe=driver.findElement(By.tagName("
iframe"
ByName
找到与Name属性相同的Input元素。
inputname="
type="
text"
/>
WebElementcheese=driver.findElement(By.name("
ByLinkText
找到与Text属性精确匹配的超链接。
ahref="
WebElementcheese=driver.findElement(By.linkText("
ByPartialLinkText
找到与Text属性模糊匹配的超链接。
forcheese<
/a>
WebElementcheese=driver.findElement(By.partialLinkText("
ByCSS
这个方法名称意味着它是一个CSS探测器。
前提是浏览器默认支持这种方法,建议根据W3C的标准文档构建CSS选择器。
如果浏览器不支持CSS选择器,可以使用Sizzle。
IE6,7和FireFox3.0就是使用Sizzle作为CSS查询引擎。
注意不是所有浏览器都使用同样的CSS选择器表达式,有些CSS可能只在某一个版本中生效。
food"
spanclass="
dairy"
milk<
dairyaged"
cheese<
WebElementcheese=driver.findElement(By.cssSelector("
#foodspan.dairy.aged"
ByXPath
当有需要时,WebDriver还可以使用浏览器自带的XPATH。
对于那些不支持XPATH的浏览器,我们提供了WebDriver特有的实现方式。
请确保熟悉XPATH在不同的引擎中的区别,否则会导致一些不可预料的问题。
Driver
大小写敏感
属性值是否可见
是否支持XAPTH
HtmlUnitDriver
仅识别小写
可见
是
IEDriver
否
FireFoxDiver
大小写不敏感
上面的表格有一些抽象,让我们来看个例子
inputtype="
name="
example"
/>
INPUTtype="
other"
inputs=driver.findElements(By.xpath("
//input"
匹配结果如下
XPATH表达式
FireFoxDriver
//input
1
2
//INPUT
有些标签的属性有默认值,这种情况下不指定属性值则匹配默认值。
比如,"
input"
标签"
type"
属性默认为"
。
使用XPATH的首要原则就是不要忽略这些隐藏的实现。
使用JavaScript
只要返回的是一个WebElement,你还可以使用任意的JS代码查找Web元素,根据查询结果会自动修改为一个WebElement对象。
一个简单的使用jQuery的例子:
WebElementelement=(WebElement)((JavascriptExecutor)driver).executeScript("
return$('
.cheese'
)[0]"
查找页面中每个label的所有Input元素:
labels=driver.findElements(By.tagName("
label"
inputs=(List<
)((JavascriptExecutor)driver).executeScript(
varlabels=arguments[0],inputs=[];
for(vari=0;
i<
labels.length;
i++){"
+
inputs.push(document.getElementById(labels[i].getAttribute('
for'
)));
}returninputs;
labels);
7.3模拟用户输入行为
我们已经演示了在文本框输入文本内容,其他Web元素应该如何操作呢?
你可以触发CheckBox的某个选项,也可以选择Select的某个选项。
WebDriver处理Select元素也很简单。
WebElementselect=driver.findElement(By.tagName("
select"
allOptions=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.deselectAll();
select.selectByVisibleText("
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并打开该窗口就可以了:
somewhere.html"
target="
Clickheretoopenanewwindow<
作为另一种选择,你可以使用一个“窗口句柄”传递给"
switchTo().window()"
方法。
根据此方法,将会使用迭代器遍历所有打开的窗口:
for(Stringhandle:
driver.getWindowHandles()){
driver.switchTo().window(handle);
你也可以在Frame之间切换(或者进入Frame):
driver.switchTo().frame("
frameName"
你还可以根据路径使用Frame的子Frame,而且可以通过索引定位Frame。
frameName.0.child"
以上方法将切换到名称为“frameName”的Frame的第一个子Frame,所有Frame都是Web页面的最顶端开始计数。
7.5弹出框
Selenium2.0beta1版本,我们提供方法获取弹出框。
在你触发弹出框的操作后,你可以用一下方法进入弹出框:
Alertalert=driver.swit