8

我注意到,虽然在焦点事件处理无法正常工作的网格上并行运行多个硒火狐测试。我已经证实,当我的每个测试都单独运行并且给定OS的焦点时,测试通过100%的时间。我也使用Chrome在网格上并行运行测试,但没有看到目前的问题。Selenium Webdriver期间Firefox的多个实例测试无法正确处理焦点。

我在谷歌组上发现了以下线程,建议在单独的xvfb实例中启动每个浏览器可能是一个可行的解决方案。 https://groups.google.com/forum/?fromgroups#!topic/selenium-developers/1cAmsYCp2ho%5B1-25%5D

测试的部分失败是由于在项目中使用jQuery日期选择器。日期选择器在焦点事件上启动,并且由于同时执行多个硒测试,webdriver测试执行.click()命令,但焦点不会保持足够长的时间以显示日期选择器小部件。

.focus(function(){$ input.trigger(“focus”);});

我的问题是,如果有人之前已经看到了这一点,并解决它通过一些Firefox的配置文件设置。我曾尝试加载以下对该问题没有影响的属性。

profile.setAlwaysLoadNoFocusLib(true); 

测试失败的方式与之前使用该属性启用并加载到远程驱动程序Firefox配置文件中的方式相同。

我需要一种方法确保焦点事件是在100%的时间内触发的,或者解决多个Firefox浏览器争夺焦点的问题。考虑到Chrome浏览器没有显示这些问题,我想知道它是否也可能被认为是Firefox中的一个错误。

谢谢!

+0

因此,看起来我发现的页面缺少一些重要信息。在Linux Grid服务器上安装Firefox需要做一些手动操作来解决焦点问题。我不知道为什么我没有得到异常,而没有安装Lib时试图使用setAlwaysLoadNoFocusLib(true)! 我目前看到的两个链接如下。 http://code.google.com/p/selenium/wiki/NativeEventsOnLinux http://code.google.com/p/selenium/wiki/FocusStealingOnLinux 这听起来不像是有解决方案对于Mac OSX。 – jjhughes57 2012-08-21 18:47:38

+0

可以发表您的评论作为你自己的问题的答案?这样,问题就不会在搜索结果中显示出来。 – Potherca 2012-09-07 21:16:50

+0

是的,或者只是删除你的问题,你可以在没有答案的情况下执行。 – djangofan 2013-05-07 22:42:01

回答

-1

你可以对此进行讨论并且在你的控制下完全没有问题。首先编写一个方法,通过它的窗口句柄ID来识别弹出窗口。然后,使用JavaScriptExecutor在JavaScript中执行“window.focus()”,以在执行其他操作之前强制窗口进行聚焦。然后,如果需要,可以通过窗口句柄名称关闭弹出窗口。

2

@djangofan:错了。你无法锁定焦点。在一个窗口中请求焦点并触发某个动作之前,另一个窗口请求焦点,并且您的操作(如将键发送到输入字段)不起作用。这在我们的测试中每天发生几次。这很难重现,因为每次测试运行都会在不同的地方失败。解决方案是在单独的显示器中执行每个浏览器。例如。当您启动浏览器

Xvfb ... -screen 1 1200x800x24 -screen 2 1200x800x24 ... 

然后,分配单独的页面,它:你可以使用的Xvfb

browser.setEnvironmentProperty("DISPLAY", ":N.1"); 
    browser.setEnvironmentProperty("DISPLAY", ":N.2"); 
    ... 
+0

要在python中为Firefox实例设置DISPLAY变量,只需添加:'firefox.add_command_line_options(' - display =:'+ str(display.display))' – 2015-12-03 09:31:40

+0

感谢python示例。这将如何使用Selenium Grid工作?在我看来,只有在xvfb所在的服务器上运行测试时,此显示设置才有效。如果通过远程selenium网格/集线器/节点运行测试,则可以通过远程创建驱动程序 - 不存在用于设置命令行选项的FirefoxBinary。 – 2016-02-24 20:37:03

0

我有同样的问题在我的持续集成环境与詹金斯。 经过长期研究,我发现old bug in firefox导致new config flag,以避免这些问题。

解决方法是在测试使用的Firefox配置文件中启用此标志。该标志是focusmanager.testmode,将其设置为true。

enter image description here

的解释是,焦点事件被触发,只有当Firefox窗口被激活。如果你运行多个测试你有多个窗口,所以只有活动的触发焦点事件。有了这个参数,即使对于非活动窗口,事件也是触发的。

相关问题