头图

【注】本文译自:
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 软件最吸引人的一些用途:

  1. 自动化测试:在大型项目中,自动化测试会派上用场,在大型项目中,如果不是 Selenium,测试人员将必须手动测试每个创建的功能。使用 Selenium,所有手动任务都可以自动化,从而减轻了测试人员的负担和压力。
  2. 跨浏览器兼容性:Selenium 支持多种浏览器,例如:Chrome、Mozilla Firefox、Internet Explorer、Safari 和 Opera。
  3. 提高测试覆盖率:通过自动化的测试,可以减少总体测试时间,从而为测试人员腾出时间来同时在不同的测试场景下执行更多测试。
  4. 减少测试执行时间:由于 Selenium 支持并行测试执行,因此可以大大减少并行测试执行时间。
  5. 多操作系统支持: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表格
  • 框架

  测试这些元素本质上意味着我们必须检查它们是否工作正常,并按照我们希望的方式进行响应。例如,如果我们正在测试文本框,您将对它进行什么测试?

  1. 我们是否能够将文本或数字发送到文本框
  2. 我们可以检索已传递到文本框等的文本吗?

  如果我们正在测试图像,则可能需要:

  1. 下载图片
  2. 上传图片
  3. 点击图片链接
  4. 检索图像标题等。

  类似地,可以对前面提到的每个元素执行操作。但是只有将元素放置在网页上之后,我们才能执行操作并开始对其进行测试,对吗? 因此,下一个主题,我将介绍元素定位器技术。

定位网页上存在的浏览器元素

  网页上的每个元素都具有属性。元素可以具有多个属性,并且这些属性中的大多数对于不同的元素而言都是唯一的。例如,考虑具有两个元素的页面:图像和文本框。 这两个元素都有一个“名称”属性和一个“ 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/”);


信码由缰
65 声望8 粉丝

“码”界老兵,分享程序人生。