Selenium - Webdriver
WebDriver 是一个用于自动测试 Web 应用程序的工具。它通常被称为 Selenium 2.0。WebDriver 使用不同的底层框架,而 Selenium RC 使用嵌入在浏览器中的 JavaScript Selenium-Core,这有一些限制。WebDriver 直接与浏览器交互,无需任何中介,不像 Selenium RC 依赖于服务器。它用于以下上下文 -
多浏览器测试,包括 Selenium RC (Selenium 1.0) 未很好支持的浏览器改进功能。
处理多个框架、多个浏览器窗口、弹出窗口和警报。
复杂的页面导航。
高级用户导航,例如拖放。
基于 AJAX 的 UI 元素。
建筑学
WebDriver 最好用一个简单的架构图来解释,如下所示。
Selenium RC 与 WebDriver
| SeleniumRC | Selenium网络驱动程序 |
|---|---|
| Selenium RC 的架构很复杂,因为在开始测试之前需要启动并运行服务器。 | WebDriver 的架构比 Selenium RC 更简单,因为它从操作系统级别控制浏览器。 |
| Selenium 服务器充当浏览器和 Selenese 命令之间的中间人。 | WebDriver直接与浏览器交互,并使用浏览器的引擎来控制它。 |
| Selenium RC 脚本执行速度较慢,因为它使用 Javascript 与 RC 交互。 | WebDriver 速度更快,因为它直接与浏览器交互。 |
| Selenium RC 不支持无头执行,因为它需要真正的浏览器才能使用。 | WebDriver可以支持无头执行。 |
| 这是一个简单而小的 API。 | 与 RC 相比,API 复杂且有点大。 |
| 较少面向对象的 API。 | 纯粹面向对象的API。 |
| 无法测试移动应用程序。 | 可以测试iPhone/Android应用程序。 |
使用 WebDriver 编写脚本
让我们了解如何使用 WebDriver。为了进行演示,我们将使用https://www.calculator.net/。我们将执行位于“数学计算器”下的“百分比计算器”。我们已经下载了所需的 WebDriver JAR。详细信息请参阅“环境设置”一章。
步骤 1 - 从提取的 Eclipse 文件夹中启动“Eclipse”。
步骤 2 - 单击“浏览”按钮选择工作区。
步骤 3 - 现在从“文件”菜单创建一个“新项目”。
步骤 4 - 输入项目名称并单击“下一步”。
步骤 5 - 转到“库”选项卡并选择我们已下载的所有 JAR。添加对 Selenium WebDriver Library 文件夹的所有 JAR 以及 selenium-java-2.42.2.jar 和 selenium-java-2.42.2-srcs.jar 的引用。
步骤 6 - 创建包,如下所示。
步骤 7 - 现在右键单击包并选择“新建”>>“类”以创建“类”。
步骤 8 - 现在命名该类并使其成为主函数。
步骤 9 - 课程大纲如下所示。
步骤 10 - 现在是时候编码了。以下脚本更容易理解,因为它嵌入了注释来清楚地解释步骤。请查看“定位器”一章以了解如何捕获对象属性。
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class webdriverdemo {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
//Puts an Implicit wait, Will wait for 10 seconds before throwing exception
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Launch website
driver.navigate().to("http://www.calculator.net/");
//Maximize the browser
driver.manage().window().maximize();
// Click on Math Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
// Click on Percent Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
// Enter value 10 in the first number of the percent Calculator
driver.findElement(By.id("cpar1")).sendKeys("10");
// Enter value 50 in the second number of the percent Calculator
driver.findElement(By.id("cpar2")).sendKeys("50");
// Click Calculate Button
driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr[2]/td/input[2]")).click();
// Get the Result Text based on its xpath
String result =
driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/font/b")).getText();
// Print a Log In message to the screen
System.out.println(" The Result is " + result);
//Close the Browser.
driver.close();
}
}
步骤 11 - 上述脚本的输出将打印在控制台中。
最常用的命令
下表列出了 WebDriver 中一些最常用的命令及其语法。
| 先生。 | 命令与说明 |
|---|---|
| 1 | 驱动程序.get("URL") 导航到应用程序。 |
| 2 | element.sendKeys("输入文本") 在输入框中输入一些文本。 |
| 3 | 元素.clear() 清除输入框中的内容。 |
| 4 | select.取消全选() 取消选择页面上第一个 SELECT 中的所有 OPTION。 |
| 5 | select.selectByVisibleText("一些文本") 选择具有用户指定输入的选项。 |
| 6 | driver.switchTo().window("窗口名称") 将焦点从一个窗口移至另一个窗口。 |
| 7 | driver.switchTo().frame("frameName") 从一个框架摆动到另一个框架。 |
| 8 | driver.switchTo().alert() 帮助处理警报。 |
| 9 | driver.navigate().to("URL") 导航至 URL。 |
| 10 | driver.navigate().forward() 向前导航。 |
| 11 | driver.navigate().back() 导航回来。 |
| 12 | 驱动程序.close() 关闭与驱动程序关联的当前浏览器。 |
| 13 | 驱动程序.quit() 退出驱动程序并关闭该驱动程序的所有关联窗口。 |
| 14 | 驱动程序.刷新() 刷新当前页面。 |
