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

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

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

任何建议表示赞赏,可供讨论。


编辑

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

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

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

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


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

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

在切换发生之后,对标签的内容进行基本的selenium自动化,之后我们重复整个过程。

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


编辑2

执行以下操作后:

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

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

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

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

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

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

问题确实发生在:

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

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