【问题标题】:How can I make my Selenium test suite launch its Firefox instances in Xnest or Xephyr and pass?如何让我的 Selenium 测试套件在 Xnest 或 Xephyr 中启动其 Firefox 实例并通过?
【发布时间】:2013-11-09 17:01:12
【问题描述】:

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

$ 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 的选项,但没有发现任何有用的信息。

涉及的版本有:

  • Firefox 22 和 24。
  • 硒 2.35.0 和 2.37.2
  • Xnest 和 Xephyr 1.14.3

【问题讨论】:

    标签: firefox testing selenium x11


    【解决方案1】:

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

    第一个和第三个问题可以通过在 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-03-15
      • 1970-01-01
      • 2012-03-28
      • 2013-06-30
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多