Selenium 3 如何操作网页元素

How Selenium 3 operate web elements

Selenium 2 注入 JavaScript 以执行 click 等操作。

Selenium 3 是如何工作的?

直接取自 selenium documentation 页面

Selenium-WebDriver makes direct calls to the browser using each browser’s native support for automation. How these direct calls are made, and the features they support depends on the browser you are using. Information on each ‘browser driver’ is provided later in this chapter.

For those familiar with Selenium-RC, this is quite different from what you are used to. Selenium-RC worked the same way for each supported browser. It ‘injected’ javascript functions into the browser when the browser was loaded and then used its javascript to drive the AUT within the browser. WebDriver does not use this technique. Again, it drives the browser directly using the browser’s built in support for automation.

浏览器本机支持在

中进行了说明

使用 Javascript 引擎的是 Selenium RC :) 除了作为 JS 框架之外,它还会引起很多问题。例如,不同的浏览器对Javascript进行了安全限制,所以很多事情变得不可能和受到限制。

因此,随着 Selenium 2 (Selenium WebDriver) 的发布,它已被弃用,取而代之的是在浏览器中本地工作的驱动程序。

让我们详细说明一下。所以,Selenium RC:

  • 客户端库(不同语言实现)通过 Selenese 命令(http 请求命令)与 Selenium RC 服务器通信以执行。
  • Selenium RC 服务器使用 Selenium Core JavaScript 命令将 Selenium 命令传递给浏览器。
  • 服务器在开始测试时“注入”到浏览器中的那些JS命令。
  • 浏览器使用其 JS 解释器执行命令。

所以,Selenium RC 架构看起来像这样:

现在,Selenium 2 弃用了所有这些 RC-JS 注入魔法。相反,WebDriver 与以本机方式(使用浏览器原子)与浏览器通信的浏览器驱动程序通信(使用基于 http 请求的命令)。而且,Selenium 项目负责为每个浏览器提供驱动程序!记住这一点,它在下一段中很重要 ;)

Selenium 2架构如下(注意native调用):

Selenium 3 中,所有主要浏览器供应商 ship their own WebDriver 实现(Apple、Google、Microsoft 和 Mozilla)。因为浏览器供应商比任何人都更了解他们的浏览器,所以他们的 WebDriver 实现可以与浏览器紧密耦合,从而为您带来更好的测试体验。此外,删除了 Selenium RC 的所有路径。万岁!

所以 Selenium 3 通过驱动程序执行的本机调用(与 Selenium 2 一样)来操作 WebElements,但是,这次,浏览器驱动程序是由浏览器供应商开发的。