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查询引擎。