Selenium ChromeDriver - 在后台运行但不是无头

时间:2018-03-13 17:40:13

标签: c# google-chrome selenium webdriver selenium-chromedriver

我正在寻找一种在后台使用chrome驱动程序运行selenium测试的方法。我的意思是背景,而不是前景聚焦窗口。我实际上可以做到这一点,但是只要在Chrome驱动程序中发生打开新选项卡或在窗口之间切换(因此基本上切换窗口句柄)等操作,浏览器窗口就会被推到前台。

所以我的问题是,如果不运行无头测试,我怎样才能防止这种情况发生?

任何建议都值得赞赏,可供讨论。

<小时/>

修改

作为一种暂时的解决方案,我想出了以下内容。

使用Windows 10虚拟桌面功能,我在一个单独的虚拟桌面上运行测试,从而运行Chrome浏览器窗口。 然后我切换回主虚拟桌面继续执行其他任务。 这可以防止Chrome浏览器窗口被强制到前台。

请注意,当上述任何操作出现时,这仍然会在任务栏中显示闪烁的镀铬图标。

仍在寻找更加可靠的解决方案,因此任何建议仍然存在。

为了有希望打开新的观点和讨论点,最终解决方案,我将提供一些更详细的信息,说明我的代码在做什么。

我有5个镀铬网页驱动程序,每个网页驱动程序包含6个标签(WindowHandles)。 这个想法是必须在每个标签上连续重复某个过程。因此,我们遍历每个webdriver,并在每个选项卡上的webdriver中,并将此选项卡设置为webdrivers当前的WindowHandle。这使得chrome窗口可以明显切换到指定的选项卡。

在进行了切换之后,对标签的内容进行了基本的硒自动化,之后重复整个过程。

当chrome webdriver切换到新选项卡(WindowHandle)时,实际问题似乎发生,此时包含选项卡的chrome窗口被推到前台并窃取焦点。请注意,这并不总是发生,通常它可以毫无问题地切换标签。所以还不清楚还有另一个因素会导致窗户偷走焦点。

<小时/>

编辑2

执行以下操作后:

  

我重载了selenium方法,该方法用于在标签之间切换(WindowHandles),每次调用SetWindoPos。不幸的是,这也没有解决这个问题。我将尝试更深入地了解可能导致此问题的原因,并将报告回来。 - S. Van den Wyngaert

我在运行测试时出去了几个小时,然后又回来看到我还在我的主虚拟桌面(win10功能)上。这意味着在我离开期间没有发生这个问题。我再次开始工作,打开了一个镀铬窗口,注意到在我这样做之后不久,焦点被一个镀铬驱动器的窗口再次偷走了。

我从中得出的结论是,只有在打开另一个chrome窗口(未通过代码中的chrome驱动程序打开)时才会出现此问题。 我会继续调查,并会报告更新。

在调查此行为几个小时之后,我注意到当另一个镀铬窗口打开时,只要它有焦点,就不会发生问题。所以要快速总结一下:

在以下情况下不会发生此问题:

  • 没有其他镀铬窗(不是硒驱动)打开或最小化
  • 打开另一个镀铬窗口(不是硒驱动)并具有焦点
  • 另一个运行全屏模式的应用程序具有焦点

问题确实发生在:

  • 另一个镀铬窗口(不是硒驱动)打开且没有焦点

请注意,当我谈到另一个镀铬窗口时,我特别指的是不是由硒驱动的镀铬窗口,因此用户打开了常规的镀铬窗口。

2 个答案:

答案 0 :(得分:1)

扩展解决方案的另一个不错的选择是,如果您的计算机具有运行docker的能力,请使用 zalenium

这是一个基于docker的自动缩放硒网格解决方案,开箱即用。

您可以通过管理页面实时观看测试,事实结束后观看录音,通过VNC进行实时互动来暂停/调试。还可以说不用担心更改浏览器版本的事情。

我上次使用它时,它出现了一个奇怪的错误,并时不时地引发流错误结束-但这是一个好年头。

答案 1 :(得分:0)

最简单的方法是运行本地硒网格。将您的节点作为Windows服务启动。这样,测试将在后台运行,而不会毫无头绪。