您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
Selenium 2.0 WebDriver 使用指南
作者:网络转载 发布时间:[ 2014/2/14 13:46:43 ] 推荐标签:Selenium WebDriver 功能测试

  ByClassName
  在这种场景下,我们引用DOM元素的属性。实际情况是很多元素都有一样的ClassName,因此找到多个有相同ClassName的元素,比找到第一个拥有这个ClassName的元素来的更重要。
  示例:如何使用该方法定位元素
  <divclass="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>
  List<WebElement>cheeses=driver.findElements(By.className("cheese"));
  ByTagName
  DOM元素Tag的名称。
  示例:如何使用该方法定位元素
  <iframesrc="..."></iframe>
  WebElementframe=driver.findElement(By.tagName("iframe"));
  ByName
  找到与Name属性相同的Input元素。
  示例:如何使用该方法定位元素
  <inputname="cheese"type="text"/>
  WebElementcheese=driver.findElement(By.name("cheese"));
  ByLinkText
  找到与Text属性精确匹配的超链接。
  示例:如何使用该方法定位元素
  <ahref="http://www.google.com/search?q=cheese">cheese</a>
  WebElementcheese=driver.findElement(By.linkText("cheese"));
  ByPartialLinkText
  找到与Text属性模糊匹配的超链接。
  示例:如何使用该方法定位元素
  <ahref="http://www.google.com/search?q=cheese">searchforcheese</a>
  WebElementcheese=driver.findElement(By.partialLinkText("cheese"));
  ByCSS
  这个方法名称意味着它是一个CSS探测器。前提是浏览器默认支持这种方法,建议根据W3C的标准文档构建CSS选择器。如果浏览器不支持CSS选择器,可以使用Sizzle。IE6,7和FireFox3.0是使用Sizzle作为CSS查询引擎。
  注意不是所有浏览器都使用同样的CSS选择器表达式,有些CSS可能只在某一个版本中生效。
  示例:如何使用该方法定位元素
  <divid="food"><spanclass="dairy">milk</span><spanclass="dairyaged">cheese</span></div>
  WebElementcheese=driver.findElement(By.cssSelector("#foodspan.dairy.aged"));
  ByXPath
  当有需要时,WebDriver还可以使用浏览器自带的XPATH。对于那些不支持XPATH的浏览器,我们提供了WebDriver特有的实现方式。请确保熟悉XPATH在不同的引擎中的区别,否则会导致一些不可预料的问题。
  Driver大小写敏感属性值是否可见是否支持XAPTH
  HtmlUnitDriver仅识别小写可见是
  IEDriver仅识别小写可见否
  FireFoxDiver大小写不敏感可见是上面的表格有一些抽象,让我们来看个例子
  <inputtype="text"name="example"/>
  <INPUTtype="text"name="other"/>
  List<WebElement>inputs=driver.findElements(By.xpath("//input"));
  匹配结果如下
  XPATH表达式HtmlUnitDriverFireFoxDriverIEDriver
  //input122
  //INPUT020有些标签的属性有默认值,这种情况下不指定属性值则匹配默认值。比如,"input"标签"type"属性默认为"text"。使用XPATH的首要原则是不要忽略这些隐藏的实现。
  使用JavaScript
  只要返回的是一个WebElement,你还可以使用任意的JS代码查找Web元素,根据查询结果会自动修改为一个WebElement对象。
  一个简单的使用jQuery的例子:
  WebElementelement=(WebElement)((JavascriptExecutor)driver).executeScript("return$('.cheese')[0]");
  查找页面中每个label的所有Input元素:
List<WebElement>labels=driver.findElements(By.tagName("label"));
List<WebElement>inputs=(List<WebElement>)((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"));
List<WebElement>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")));
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并打开该窗口可以了:
  <ahref="somewhere.html"target="windowName">Clickheretoopenanewwindow</a>
  作为另一种选择,你可以使用一个“窗口句柄”传递给"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.switchTo().alert();
  以上方法将会返回当前当前打开的alert对象,你可以对这个对象进行任何可操作:点击取消,点击确定,关闭窗口,获取alert的文本内容等。这个接口在alerts、confirms、prompts对象上都有很好的应用,具体请参见API文档。
  7.6Navigation:浏览器本地历史记录
  前文中,我们使用get方法来获取网页(driver.get("http://www.example.com"))。正如你看到的,WebDriver有不少轻量级的功能聚焦的接口,Navigation是这样一个。正因为加载网页是一个再普通不过的需求,这个方法存在于Driver类下面,但是用法很简单:
  driver.navigate().to("http://www.example.com");
  重申一下,"navigate().to()"和"get()"做的是同样的事情,只不过其中一个更适合打印。
  Navigate接口还提供方法可以在浏览器历史记录中前后翻页。
  driver.navigate().forward();
  driver.navigate().back();
  请注意,以上功能完全取决于底层的浏览器。如果你习惯跨浏览器操作,当你使用这些接口时可能会出现意想不到的的异常。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd