共计 5005 个字符,预计需要花费 13 分钟才能阅读完成。
【注】本文译自:
https://www.edureka.co/blog/s…
在本教程中,我将向您介绍 Selenium Webdriver,它是当今市场上应用最宽泛的自动化测试框架。它是开源的,可与所有驰名的编程语言(如 Java、Python、C#、Ruby、Perl 等)一起应用,以实现浏览器流动的自动化。通过本文,我将告诉您开始应用 Selenium WebDriver 测试 Web 应用程序所需理解的所有信息。
以下是本教程的主题:
- 什么是 Selenium Webdriver?
- Selenium 容易学吗?
- Selenium 软件有什么作用?
- Selenium 的基本知识是什么?
- Selenium RC 的毛病和 WebDriver 的诞生
- 什么是浏览器元素?
- 定位网页上的浏览器元素
- 浏览器元素上的操作
什么是 Selenium WebDriver?
Selenium WebDriver 是一个基于 Web 的自动化测试框架,能够测试在各种 Web 浏览器和各种操作系统上启动的网页。实际上,您还能够自在应用各种编程语言(例如 Java、Perl、Python、Ruby、C#、PHP 和 JavaScript)编写测试脚本。请留神,Mozilla Firefox 是 Selenium WebDriver 的默认浏览器。
然而很多时候,刚入门的测试人员会想到这个疑难:
Selenium 好学吗?
要用在行的话答复这个问题,我会说:”是的,是!”。Selenium 真的很容易学习和把握,因为您只须要对任意一种常见的编程语言(例如 Java、C#、Python、Perl、Ruby、PHP)有根本的理解。事后把握这些编程语言中的任何一种的都可有助于编写测试用例。然而,如果您没有,那就不要放心了。Selenium IDE 是一个能够无效应用的基于 GUI 的工具。
Selenium 软件有什么作用?
以下是 Selenium 软件最吸引人的一些用处:
- 自动化测试:在大型项目中,自动化测试会派上用场,在大型项目中,如果不是 Selenium,测试人员将必须手动测试每个创立的性能。应用 Selenium,所有手动工作都能够自动化,从而加重了测试人员的累赘和压力。
- 跨浏览器兼容性:Selenium 反对多种浏览器,例如:Chrome、Mozilla Firefox、Internet Explorer、Safari 和 Opera。
- 进步测试覆盖率:通过自动化的测试,能够缩小总体测试工夫,从而为测试人员腾出工夫来同时在不同的测试场景下执行更多测试。
- 缩小测试执行工夫:因为 Selenium 反对并行测试执行,因而能够大大减少并行测试执行工夫。
- 多操作系统反对:Selenium WebDriver 提供跨 Windows、Linux、UNIX、Mac 等多种操作系统的反对。应用 Selenium WebDriver,您能够在 Windows 操作系统上创立测试用例并在 Mac 操作系统上执行。
Selenium 的基本知识是什么?
WebDriver 是 Selenium v2.0 的一部分。Selenium v1 仅由 IDE,RC 和 Grid 组成。然而 Selenium 我的项目的次要冲破是开发 WebDriver 并将其作为 Selenium v2 的代替产品引入。然而,随着 Selenium v3 的公布,不举荐应用 RC,而将其迁徙到旧版软件包中。您依然能够下载并应用 RC,但不要冀望对其提供任何反对。
简而言之,WebDriver 绝对于 RC 的劣势是:
- 反对更多的编程语言、操作系统和 Web 浏览器
- 克服 Selenium 1 的局限性,例如文件上传、下载、弹出窗口和对话阻碍
- 与 RC 相比,命令更简略,API 更好
- 反对批量测试,跨浏览器测试和数据驱动的测试
然而,与 RC 相比,毛病是无奈生成测试报告。RC 生成具体的报告。
下图形容了 WebDriver 的工作形式:
然而您是否想晓得为什么须要 Selenium Webdriver?接下来,我将探讨 Selenium RC 的局限性,因为这是最终开发 WebDriver 的起因。
Selenium RC 的毛病和 WebDriver 的诞生
当我说 Selenium RC 推出时立刻引起轰动时,您可能会感到诧异。那是因为它克服了 同源策略 问题,而在应用 Selenium Core 测试 Web 应用程序时这是一个次要问题。然而您晓得什么是同源政策问题吗?
同源策略是用于强制施行 Web 应用程序平安模型的规定。依据同源策略,当且仅当被测试的 JavaScript 和网页都来自同一域时,Web 浏览器才会容许 JavaScript 代码拜访网页上的元素。Selenium Core 是基于 JavaScript 的测试工具,因为无奈测试每个网页的起因而受到限制。
然而,当 Selenium RC 呈现时,它使测试人员解脱了同源政策问题。然而,RC 如何做到这一点?RC 通过应用另一个称为 Selenium RC 服务器的组件来做到这一点。因而,RC 是由两个组件组合而成的工具:Selenium RC 服务器 和 Selenium RC 客户端。
Selenium RC 服务器是一个 HTTP 代理服务器,旨在“坑骗”浏览器,使其置信 Selenium Core 和被测试的 Web 应用程序来自同一域。因而,不能阻止 JavaScript 代码拜访和测试任何网站。
只管 Selenium RC 受到了很大的欢送,但它也有本人的问题。次要的是执行测试所破费的工夫。因为 Selenium RC 服务器是浏览器与您的 Selenium 命令之间通信的中间人,因而执行测试十分耗时。除了工夫因素之外,RC 的架构也有些简单。
这种架构波及首先将 Selenium Core 注入 Web 浏览器。而后,Selenium Core 将接管来自 RC 服务器的指令并将其转换为 JavaScript 命令。此 JavaScript 代码负责拜访和测试 Web 元素。上面这张图有助于您将理解 RC 的工作原理。
为了克服这些问题,开发了 Selenium WebDriver。WebDriver 更快,因为它间接与浏览器交互,并且不须要内部代理服务器。因为从操作系统级别管制浏览器,因而架构也更简略。下图将帮忙您理解 WebDriver 的工作形式。
WebDriver 的另一个益处是它反对在 HTML Unit 驱动程序(无头驱动程序)上进行测试。当咱们说无头驱动程序时,它是指浏览器没有 GUI 的事实。另一方面,RC 不反对 HTML Unit 驱动程序。这些是 WebDriver 比 RC 得分高的起因。
在学习 Selenium 的概念之前,您应该对 Java 或任何其余面向对象的编程语言有根本的理解。Selenium 反对的语言包含 C#、Java、Perl、PHP、Python 和 Ruby。以后,Selenium Webdriver 在 Java 和 C# 中最受欢迎。
当初,让咱们持续,下一部分学习“浏览器元素”,我将告诉您这些元素是什么以及如何在这些 Web 元素上进行测试。
什么是浏览器元素?
元素是网页上存在的不同组件。咱们在浏览时留神到的最常见元素是:
- 文本框
- CTA 按钮
- 图像
- 超链接
- 单选按钮 / 复选框
- 文字区 / 错误信息
- 下拉框 / 列表框 / 组合框
- Web 表格 / HTML 表格
- 框架
测试这些元素实质上意味着咱们必须查看它们是否工作失常,并依照咱们心愿的形式进行响应。例如,如果咱们正在测试文本框,您将对它进行什么测试?
- 咱们是否可能将文本或数字发送到文本框
- 咱们能够检索已传递到文本框等的文本吗?
如果咱们正在测试图像,则可能须要:
- 下载图片
- 上传图片
- 点击图片链接
- 检索图像题目等。
相似地,能够对后面提到的每个元素执行操作。然而只有将元素搁置在网页上之后,咱们能力执行操作并开始对其进行测试,对吗?因而,下一个主题,我将介绍元素定位器技术。
定位网页上存在的浏览器元素
网页上的每个元素都具备属性。元素能够具备多个属性,并且这些属性中的大多数对于不同的元素而言都是惟一的。例如,思考具备两个元素的页面:图像和文本框。这两个元素都有一个“名称”属性和一个“ID”属性。这些属性值对于每个元素都必须是惟一的。换句话说,两个元素不能具备雷同的属性值。元素的“类名”能够具备雷同的值。
在本例中,图像和文本框既不能具备雷同的“ID”值,也不能具备雷同的“名称”值。然而,页面上的一组元素可能有一些独特的属性。稍后,我将告诉您这些属性是哪些,然而在此之前,让我列出咱们能够用来定位元素的 8 个属性。这些属性是 ID、名称、类名、标签名、链接文本、局部链接文本、CSS 和 XPath。
因为元素是应用这些属性定位的,因而咱们将其称为“定位器”。定位器有:
- By.id
语法: driver.findElement(By.id(“xxx”)); - By.name
语法: driver.findElement(By.name(“xxx”)); - By.className
语法: driver.findElement(By.className(“xxx”)); - By.tagName
语法: driver.findElement(By.tagName(“xxx”)); - By.linkText
语法: driver.findElement(By.linkText(“xxx”)); - By.partialLinkText
语法: driver.findElement(By.partialLinkText(“xxx”)); - By.css
语法: driver.findElement(By.css(“xxx”)); - By.xpath
语法: driver.findElement(By.xpath(“xxx”));
通过查看下面的语法,您可能曾经意识到定位器是在外部调用的。因而,在进行进一步操作之前,您须要学习可用于对元素执行操作的所有其余办法、浏览器命令和性能。
浏览器元素上的操作
从当初开始,您将取得很多乐趣,因为实践更少、代码更多。因而,请做好筹备,关上 Eclipse IDE,并装置必须的 Selenium 软件包。
要开始测试网页,咱们须要首先关上浏览器,而后通过提供正确的 URL 导航到该网页?看看上面的代码,我在下面复制了同样的代码。Firefox 浏览器将首先启动,而后将导航到 Facebook 的登录页面。
package seleniumWebDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class WebDriverClass
{public static void main(String[] args)
{System.setProperty("webdriver.gecko.driver", "files/geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.facebook.com/");
driver.getTitle();
driver.quit();}
}
**import
org.openqa.selenium.WebDriver;** 是一个库包,其中蕴含启动加载有特定驱动程序的浏览器所需的类。
**import
org.openqa.selenium.firefox.FirefoxDriver;** 是一个库包,其中蕴含 FirefoxDriver 类,该类是启动 FirefoxDriver 作为 WebDriver 类启动的浏览器所需的。
System.setProperty(“webdriver.gecko.driver”,“files/geckodriver.exe”); – 该命令告诉运行时引擎指定门路中存在 Gecko 驱动程序。在 Firefox 35 之后,咱们须要下载 Gecko 驱动程序以应用 WebDriver。如果要在 Chrome 上进行测试,则必须下载 ChromeDriver(这是一个.exe 文件),并在此代码行中指定其门路。对于其余浏览器,咱们也必须这样做。
WebDriver driver = new FirefoxDriver(); – 此命令用于启动新的 Firefox 驱动程序对象。
driver.get(“https://www.edureka.co/”);