【问题标题】:Confusion about Selenium and WebDrivers对 Selenium 和 WebDriver 的困惑
【发布时间】:2018-01-09 14:08:45
【问题描述】:

我进入了一个需要测试 WebGUI 的项目。 Selenium 与 Jenkins 结合使用来安排任务和运行测试。所有这些都由一台服务器 (Linux) 处理。

常规测试工作正常,但 WebGUI 测试失败,我应该让它们工作。但是,我对 Jenkins 的插件“Selenium Grid”的角色(是否有必要)、使用 selenium 库的项目内部的 JUnit 测试以及所需的无头浏览器的设置感到非常困惑。

插件“Selenium Grid”对于 Jenkins 的作用到底是什么?Selenium 库如何与无头浏览器进行通信(WebDrivers 的作用?)? 我已经了解 Selenium 集线器和节点,但不知道如何处理。

我希望有人可以帮助我清理我的困惑......

【问题讨论】:

  • 驱动的作用是让你的代码通过发送请求来与网络浏览器进程通信。 IIRC,Selenium Grid 应该模拟多个用户同时使用您的站点,每个“用户”都做自己的事情。这样测试可以在多台机器上并行执行。
  • 应该只使用一台机器。因为它是服务器,所以没有可用的 GUI(由于限制 XVFB 无法安装),最好应该测试 Firefox 和 IE。这台机器是否应该成为 Selenium Hub 再次启动自己作为唯一节点?或者我可以将 Java 中的 Selenium 库与 WebDriver 一起使用吗?

标签: java selenium jenkins junit headless-browser


【解决方案1】:

Selenium Grid 可用于设置可扩展的自动化浏览器环境。它通常用于自动化 GUI 测试。它由一个 Hub 和一个或多个 Nodes 组成。

应该启动一个 Selenium Hub,并且应该存储生成的 URL。

然后应该使用对集线器的 URL 的引用来启动所需数量的 Selenium 节点。节点将自己注册到 Hub。

然后您可以使用Selenium Java 创建一个RemoteWebDriver 实例,可选择指定Selenium Hub 的url。这个 webdriver 只是一个 Java API,实际工作将在 Selenium Node 环境中完成。

您可以使用 Java API 在 WebDriver 实例上实现所需的操作。运行时,代码会将所有调用委托给正在运行的 Selenium 环境。

有多种方法可以实际启动集线器和节点。 Jenkins 插件可以做到这一点,您可以使用 Docker、本地进程或更多。我建议不要将你的设置直接绑定到 Jenkins,除非你确定你永远不会切换。

Jenkins Selenium Plugin 指定创建 WebDriver 的 URL:

new RemoteWebDriver(new URL("http://jenkins.mydomain:4444/wd/hub"), capability);

jenkins.mydomain 可能是您的 Linux 服务器的 IP。就在它的上方是一条线,表示它“也”接受外部节点。我对插件不熟悉,所以不知道这是否意味着它默认设置了一个或多个节点。

【讨论】:

  • 感谢您的澄清。所以 Selenium Grid(Jenkins 插件)说,它把 Jenkins 变成了一个节点可以连接到的集线器。现在我可以使用 WebDriver Implementation ,给它我的 Selenium Hub 的 URL+Port 并使用 WebDriver 类来测试我的网站?这让我很困惑,因为 HUB 和 Node 将是同一台机器,这似乎不应该是这样。
  • @GxTruth 我添加了更多关于 Jenkins 插件的信息。
【解决方案2】:

取自以下网站。 https://wiki.jenkins.io/display/JENKINS/Selenium+Plugin

此插件通过以下方式设置 Selenium Grid

  • 在主服务器上,Selenium Grid Hub 在端口 4444 上启动,除非在 Jenkins 全局配置中另外配置。这是您的所有测试都应该连接到的地方。
  • 对于每个从站,复制必要的二进制文件并启动 Selenium RC。
  • RC 和 Selenium Grid Hub 会自动连接在一起。

现在的问题是你需要这个吗?

这取决于项目的要求。你只需要问自己这个问题

  • 您是否需要在现在或不久的将来并行运行测试(以缩短时间或进行浏览器兼容性测试)。

【讨论】:

  • WebGUI 的测试很少,所以可能不需要并行测试。但是,应该支持 Firefox 和 Internet Explorer,因此需要进行测试。但是,应该只涉及一台机器,所以我没有十几台机器运行具有不同浏览器/操作系统的 Selenium 节点。我可以使用不同的 WebDriver(不同的模式?)来模拟吗?
  • 是的,你可以。只需删除插件并将执行绑定到某个节点即可。
  • 还有一个问题。 WebDrivers 似乎使用需要实际浏览器作为外部应用程序的无头浏览器。是这种情况还是 Selenium 实现了无需外部工具的无头浏览器?
  • 无头浏览器、无头浏览器中的 chrome 或 phantomjs 驱动程序是什么意思?您应该在线阅读有关自动化以及 selenium 实际工作原理的更多信息。
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2013-01-25
相关资源
最近更新 更多