WebDriver与Selenium(2)

发表于:2014-04-04来源:博客园作者:思勉点击数: 标签:探索式测试
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; impor

  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) {

  // 创建一个FirefoxDriver实例

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

  WebDriver driver = new FirefoxDriver();

  // 使用get方法访问Google

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

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

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

  // 找到html输入框的name

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

  // 输入要查找的内容

  element.sendKeys("Cheese!");

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

  element.submit();

  // 打印网页的标题

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

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

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

  (new WebDriverWait(driver, 10)).until(new ExpectedCondition() {

  public Boolean apply(WebDriver d) {

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

  }

  });

  // 控制台上将打印如下信息: "cheese! - Google Search"

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

  // 关闭浏览器

  driver.quit();

  }

  }

  在本章节的接下来篇幅,我们将学习如何使用WebDriver操作你的浏览器,如何使用框架和窗口来测试Web网站。当然,我们将提供更加翔实的论述和举例。

  7.Selenium-WebDriver API详解

  7.1获取Web页面

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

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

  在某些情况下,比如操作系统和浏览器的穿插组合,WebDriver有可能不会等待Web页面加载完成,这种情况下WebDriver会返回错误或者直接运行下一步操作。为了保证程序的健壮性,你需要等待页面中某个元素加载完成后再进行下一步操作,请参考Explicit and Implicit Waits。

  7.2定位UI元素

  我们可以通过WebDriver实例或者WebElement类来定位UI元素。我们为每种编程语言都提供了两种方法:“Find Element”和“Find Elements”。第一种方法返回的一个WebElement,找不到则抛出异常。第二个方法返回一个WebElement链表(List),在找不到任何DOM元素的情况下会返回空的链表。

  Find方法会使用类似探测器的类,类名叫做By。下面列举By的一些常用方法:

  By ID

  当我们定位一个UI 元素,这个是最有效也是最好的方法。不过这个方法不是万能的,有的前端开发在设计UI元素时会遗漏ID或者使用动态ID,这两种情况下都要避免使用这个方法。这时候使用获取class名称方法比By ID更合适。

  示例:如何使用该方法定位元素

  

...

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

  By Class Name

  在这种场景下,我们引用DOM元素的属性。实际情况是很多元素都有一样的Class Name,因此找到多个有相同Class Name的元素,比找到第一个拥有这个Class Name的元素来的更重要。

  示例:如何使用该方法定位元素

  

Cheddar
Gouda

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

  By Tag Name

  DOM元素Tag的名称。

  示例:如何使用该方法定位元素

  

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

  By Name

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

  示例:如何使用该方法定位元素

  

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

  By Link Text

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

  示例:如何使用该方法定位元素

  cheese

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

  By Partial Link Text

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

  示例:如何使用该方法定位元素

  search for cheese

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

  By CSS

  这个方法名称意味着它是一个CSS探测器。前提是浏览器默认支持这种方法,建议根据W3C的标准文档构建CSS选择器。如果浏览器不支持CSS选择器,可以使用Sizzle。IE6,7和FireFox3.0就是使用Sizzle作为CSS查询引擎。

原文转自:http://www.cnblogs.com/keepsilent/p/3530825.html