S. *_*ert 11 c# selenium google-chrome webdriver selenium-chromedriver
我正在寻找一种在后台使用 chrome 驱动程序运行 selenium 测试的方法。我的意思是背景,而不是前景聚焦窗口。我实际上可以做到这一点,但是一旦在 chrome 驱动程序中发生诸如打开新选项卡或在窗口之间切换(因此基本上是切换窗口句柄)之类的操作,浏览器窗口就会被推到前台。
所以我的问题是,如何在不无头运行测试的情况下防止这种情况发生?
任何建议表示赞赏,开放讨论。
作为一个有点临时的解决方案,我想出了以下内容。
使用 Windows 10 虚拟桌面功能,我在单独的虚拟桌面中运行测试,从而运行 chrome 浏览器窗口。然后我切换回我的主虚拟桌面以继续执行其他任务。这可以防止 chrome 浏览器窗口被强制置于前台。
请注意,当出现上述任何操作时,这仍然会使任务栏中出现闪烁的镀铬图标。
仍在寻找更可靠的解决方案,因此任何建议仍然得到认可。
为了希望打开新的观点和讨论点,并最终找到一个解决方案,我将提供一些关于我的代码正在做什么的更详细的信息。
我有 5 个 chrome webdrivers,每个 webdrivers 都包含 6 个选项卡(WindowHandles)。这个想法是必须在每个选项卡上连续重复某个过程。因此,我们循环遍历每个 webdriver,并在该 webdriver 中遍历每个选项卡,并将此选项卡设置为 webdrivers 当前的 WindowHandle。这使得 chrome 窗口明显地切换到指定的选项卡。
切换完成后,对选项卡的内容执行基本的 selenium 自动化,之后我们重复整个过程。
实际问题似乎发生在 chrome webdriver 切换到新选项卡(WindowHandle)时,此时包含该选项卡的 chrome 窗口被推到前台并窃取焦点。请注意,这并不总是发生,通常它可以毫无问题地切换选项卡。所以不清楚是否还有另一个因素会导致窗口窃取焦点。
执行以下操作后:
我重载了用于在选项卡(WindowHandles)之间切换的 selenium 方法,并且每次都调用 SetWindoPos。不幸的是,这也没有解决这个问题。我将尝试更深入地研究可能导致这种情况的原因,并将向您报告。– S. Van den Wyngaert
我在运行测试时出去了几个小时,然后回来发现令人惊讶的是我仍然在我的主要虚拟桌面(win10 功能)上。这意味着该问题在我离开期间并未发生。我再次开始工作,打开一个镀铬窗口,并注意到在我这样做后不久,焦点又被镀铬驱动程序的一个窗口偷走了。
我由此得出的结论是,只有在打开另一个 chrome 窗口(不是由代码中的 chrome 驱动程序打开)时才会出现问题。我会继续调查,并会报告更新。
在对这种行为进行了几个小时的调查后,我注意到当另一个 chrome 窗口打开时,只要它有焦点,问题就不会发生。所以快速总结一下:
在以下情况下不会发生此问题:
在以下情况下确实会发生此问题:
请注意,当我谈论另一个 chrome 窗口时,我特指一个不是由 selenium 驱动的 chrome 窗口,因此是用户打开的常规 chrome 窗口。
| 归档时间: |
|
| 查看次数: |
2595 次 |
| 最近记录: |