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

kq0g1dla  于 2023-03-06  发布在  Go
关注(0)|答案(2)|浏览(284)

我正在寻找一种方法来运行 selenium 测试与 chrome 驱动程序,在后台。与后台我的意思是在,而不是前景聚焦窗口。我实际上可以做到这一点,但只要像打开一个新的标签页或切换窗口(所以基本上切换窗口句柄)发生在 chrome 驱动程序,浏览器窗口被推到前台。
所以我的问题是,我怎样才能避免这种情况的发生,而不运行无头测试?
欢迎提出任何建议,并开放讨论。
编辑----
作为一个有点临时的解决方案,我想出了以下方法。
使用Windows 10虚拟桌面功能,我在一个单独的虚拟桌面中运行测试,从而运行Chrome浏览器窗口。然后切换回主虚拟桌面继续执行其他任务。这可以防止Chrome浏览器窗口被强制移到前台。
请注意,当出现上述任何操作时,仍会在任务栏中显示 Flink 的Chrome图标。
仍在寻找更坚实的解决方案,所以任何建议仍不胜感激。
为了有希望打开新的视角和讨论点,并最终找到解决方案,我将提供一些关于我的代码正在做什么的更详细的信息。
我有5个chrome webdrivers,每个webdrivers包含6个标签(WindowHandles)。这个想法是某个过程必须在每个标签上不断重复。所以我们循环每个webdrivers,并在该webdrivers中循环每个标签,并将该标签设置为webdrivers当前的WindowHandle。这使得Chrome窗口可视地切换到指定的标签。
切换完成后,将对选项卡的内容执行基本的Selenium自动化,然后重复整个过程。
实际的问题似乎发生在chrome webdriver切换到一个新的标签页(WindowHandle)时,此时包含该标签页的chrome窗口被推到前台并窃取焦点。注意,这种情况并不总是发生,通常它可以切换标签页而没有任何问题。因此,目前还不清楚是否有其他因素会导致窗口窃取焦点。
编辑2 ------
执行以下操作后:
我重载了用于在选项卡之间切换的selenium方法(WindowHandles),并且每次都调用SetWindoPos。不幸的是,这也没有解决这个问题。我将尝试更深入地研究可能导致这个问题的原因,并将向您报告。- S.货车den Wyngaert
运行测试时我出去了几个小时,回来后惊讶地发现我仍然在我的主虚拟桌面(win10功能)上。这意味着这个问题没有在我离开的时候发生。我重新开始工作,打开一个chrome窗口,注意到在我这样做后不久,焦点又被一个chrome驱动程序的窗口偷走了。
我由此得出的结论是,这个问题只会发生在另一个chrome窗口(不是由chrome驱动程序从代码中打开的)打开时。我将继续调查,并将报告更新。
经过几个小时的调查,我发现当另一个chrome窗口打开时,只要这个窗口有焦点,这个问题就不会发生。

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

  • 未打开或最小化其他chrome窗口(非selenium驱动)
  • 打开另一个chrome窗口(非selenium驱动)并具有焦点
  • 另一个运行全屏模式的应用程序具有焦点
    在以下情况下确实会出现此问题:
  • 打开另一个chrome窗口(非selenium驱动),但没有焦点

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

a5g8bdjr

a5g8bdjr1#

最简单的方法是运行一个本地selenium网格。将你的节点作为一个windows服务启动。这样测试将在后台运行,而不是无头的。

dluptydi

dluptydi2#

扩展解决方案的另一个好选择是,如果您的计算机能够运行docker,则使用zalenium
这是一个基于码头,自动缩放, selenium 网格解决方案,工程相当快的开箱即用。
您可以通过管理页面观看测试现场,观看测试后的记录,通过VNC暂停/调试现场交互。还有一些值得一提的是,您不必担心更改浏览器版本。
上次我用它的时候,它有一个奇怪的bug,时不时地抛出一个流结束错误-但那是一年前的事了。

相关问题