2

我的软件设置为运行我所做的测试套件:

$ make selenium-test

通过这种方式,套件可以顺利通过。但是,让 Firefox 实例出现在我的桌面上会让人分心。此外,当我移动鼠标时,有时会不小心导致一些测试失败。所以,我想在 Xnest 或 Xephyr 中运行 Firefox,以便它与我的其他应用程序分开。我要做的是:

$ Xnest :1 &
$ DISPLAY=:1 make selenium-test

当我这样做并且我的测试套件设置为运行 Chrome 时,没有任何问题。但是,当我使用 Firefox 执行此操作时,我遇到了以下问题:

  1. 我无法单击 Firefox 的菜单。这是必要的,因为如果测试失败,我有时会告诉 Selenium 让浏览器保持打开状态。

  2. 我无法在 Firefox 中输入任何内容。这是必需的,因为我的一些测试涉及键入文本或选择文本。

  3. 与 Chrome 完美配合的 Selenium 测试套件在 Firefox 上失败,并且没有很好的解释。

由于第二点,每当尝试在 Xnest 或 Xephyr 中运行它时,我的测试套件都会失败。

我检查了可以传递给 Xnest 和 Xephyr 的选项,但没有发现任何有用的信息。

涉及的版本有:

  • 火狐 22 和 24。
  • 硒 2.35.0 和 2.37.2
  • Xnest 和 Xephyr 1.14.3
4

1 回答 1

5

无法点击的菜单和神秘的测试失败的解决方案

第一个和第三个问题可以通过在 Xnest 或 Xephyr 实例中运行一个窗口管理器来解决。例如:

$ DISPLAY=:1 openbox &

请注意,运行窗口管理器不会解决与浏览器不兼容有关的问题。但是,如果没有窗口管理器,我已经进行了在 Firefox 上切换浏览器窗口的测试。(这些测试在Chrome上运行得非常好。)

打字的解决办法

第二个问题是由于 Firefox 与 DBus 交互造成的。这个快速而肮脏的脚本(我们称之为它start-on-display)说明了如何修复它:

#!/bin/sh

unset GTK_IM_MODULE
unset QT4_IM_MODULE
unset CLUTTER_IM_MODULE
unset XMODIFIERS
unset DBUS_SESSION_BUS_ADDRESS

display=$1
shift

export DISPLAY=$display
exec "$@"

这个脚本可以这样使用:

$ start-on-display :1 firefox

或者使用测试套件:

$ start-on-display :1 make selenium-test

虽然DBUS_SESSION_BUS_ADDRESS这是唯一一个必须绝对取消设置才能在 Firefox 中输入的变量,但也建议取消设置与输入法相关的其他环境变量。例如,它对 Chrome 有帮助。Chrome 将毫无问题地启动和运行,但如果您需要输入它,您必须在响应之前将其输入法切换为“无”。如果您在启动 Chrome 之前取消设置输入法变量,那么您不必在输入之前切换其输入法。

其他可能性

为了避免分心和与测试浏览器的意外交互,除了使用 Xnest 或 Xephyr,还可以执行以下操作。

请求将浏览器映射到屏幕外

我没有测试过,不知道浏览器或者 Selenium 会不会有这个问题。如果想要检查一个已经在运行的实例,wmctrl可以使用类似的东西将浏览器带回可视空间。

使用另一个虚拟桌面

(我认为移动到不同的屏幕是使用不同名称的相同策略。)

移动到另一个虚拟桌面,在那里启动浏览器,然后返回主桌面。不得不手动来回进行是一种痛苦。

或者也许有一些东西能够自动将浏览器映射到另一个桌面?您必须区分为测试目的而启动的浏览器实例与您可能已经在桌面上运行的浏览器实例。我之前已经通过使用WM_NAMEWM_CLASS. 并非不可能,但这会很快变得复杂。

附加提示

  • 如果您使用极简的窗口管理器,如 aewm 或 fvwm,Chromedriver 无法确定 Chrome 的位置和大小。解决方案是根本不使用窗口管理器(但随后 Firefox 的菜单将不起作用)或使用更实用的管理器。我在 openbox 上取得了很好的成功。
于 2013-11-09T17:01:12.357 回答