如何让我的Selenium测试套件在Xnest或Xephyr中启动Firefox实例并通过?
我的软件已设置为运行测试套件,我执行以下操作:如何让我的Selenium测试套件在Xnest或Xephyr中启动Firefox实例并通过?,firefox,testing,selenium,x11,Firefox,Testing,Selenium,X11,我的软件已设置为运行测试套件,我执行以下操作: $ make selenium-test 通过这种方式,套件可以顺利通过。然而,让Firefox实例出现在我的桌面上会让人分心。此外,当我移动鼠标时,有时会意外地使一些测试失败。因此,我希望在Xnest或Xephyr中运行Firefox,以便它与我的其他应用程序分开。我所做的是: $ Xnest :1 & $ DISPLAY=:1 make selenium-test 当我这样做,并且我的测试套件设置为运行Chrome时,就没有任何问题
$ make selenium-test
通过这种方式,套件可以顺利通过。然而,让Firefox实例出现在我的桌面上会让人分心。此外,当我移动鼠标时,有时会意外地使一些测试失败。因此,我希望在Xnest或Xephyr中运行Firefox,以便它与我的其他应用程序分开。我所做的是:
$ Xnest :1 &
$ DISPLAY=:1 make selenium-test
当我这样做,并且我的测试套件设置为运行Chrome时,就没有任何问题了。但是,当我使用Firefox时,我遇到了以下问题:
- Firefox22和24
- 硒2.35.0和2.37.2
- Xnest和Xephyr 1.14.3
$ DISPLAY=:1 openbox &
请注意,运行窗口管理器不会解决与浏览器不兼容有关的问题。然而,我做过一些测试,如果没有窗口管理器,在Firefox上切换浏览器窗口会失败。(这些测试完全精细铬合金。)
打字解决方案
第二个问题是由于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\u SESSION\u BUS\u ADDRESS
是在Firefox中进行输入时必须完全取消设置的唯一变量,但也建议取消设置与输入方法相关的其他环境变量。例如,它有助于铬。Chrome将毫无问题地启动和运行,但如果您需要输入,则必须在响应之前将其输入方法切换为“无”。如果您在启动Chrome之前取消设置输入法变量,那么您就不必在键入之前切换其输入法
其他可能性
为了避免分心和与测试浏览器的意外交互,除了使用Xnest或Xephyr之外,还可以执行以下操作
请求将浏览器映射到屏幕外
我还没有测试过,也不知道浏览器或Selenium是否会出现问题。如果要检查已在运行的实例,可以使用类似于wmctrl
的方法将浏览器带回可见空间
使用其他虚拟桌面
(我考虑移到另一个屏幕,在不同的名称下是相同的策略。)< /P> 移动到其他虚拟桌面,在那里启动浏览器,然后返回主桌面。必须手动来回操作是一种痛苦
或者可能有什么东西可以自动将浏览器映射到另一个桌面?您必须将为测试目的启动的浏览器实例与桌面上可能已经运行的浏览器实例区分开来。我以前使用过客户机属性,比如WM\u NAME
和WM\u CLASS
。这并非不可能,但很快就会变得复杂
附加提示
- 如果使用aewm或fvwm等极简主义窗口管理器,Chromedriver很难确定Chrome的位置和大小。解决方案是根本不使用窗口管理器(但Firefox的菜单不起作用)或使用更强大的管理器。我在openbox方面取得了很好的成功