切换选项卡时,带有无头 chrome 的 Selenium 无法获取 url

Posted

技术标签:

【中文标题】切换选项卡时,带有无头 chrome 的 Selenium 无法获取 url【英文标题】:Selenium with headless chrome fails to get url when switching tabs 【发布时间】:2019-01-16 03:44:37 【问题描述】:

我目前正在使用 Specflow 运行 Selenium。

我的一个测试点击了触发下载 pdf 文件的按钮。 该文件会自动在新选项卡中打开,然后测试会在其中获取 url 并将引用的文件直接下载到 selenium 项目。 当chrome驱动正常运行但在无头浏览器上失败并出现以下错误时,整个过程可以完美运行:

对 URL http://localhost:59658/session/c72cd9679ae5f713a6c857b80c3515e4/url 的远程 WebDriver 服务器的 HTTP 请求超时 60 秒后。 -> 请求中止:操作已超时。

尝试运行driver.Url时出现此错误

driver.Url 调用在代码的其他地方工作。只有在无头浏览器切换选项卡后才会失败。 (是的,我正在使用驱动程序切换窗口)

作为参考,如果不单击第一页上的按钮并切换选项卡,我将无法获取此 URL,因为单击按钮后会自动生成 URL。

【问题讨论】:

我也遇到了这个问题,请问您找到解决方法了吗? 我也想知道您是否找到了解决方案,因为我在 2022 年遇到了同样的情况... 【参考方案1】:

我相信您只是将参数用作“--headless”以获得更好的性能,您也应该选择屏幕尺寸。有时,由于屏幕尺寸不合适,它无法检测到您正在寻找的功能。尝试使用此代码或仅添加一行大小。

from selenium import webdriver
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome(chrome_options=chrome_options)

别忘了根据你的需要在“驱动程序”中添加其他参数。

【讨论】:

以上是关于切换选项卡时,带有无头 chrome 的 Selenium 无法获取 url的主要内容,如果未能解决你的问题,请参考以下文章

以角度切换选项卡时保持选项卡状态

在 UITabbarController 中切换选项卡时的 popToRoot UINavigationController

RichEdit 控件在切换选项卡时不显示水平滚动条

用户切换浏览器选项卡时如何从 JApplet 中隐藏 JDialog?

IllegalArgumentException:快速切换 ActionBar 选项卡时没有找到片段 id 的视图

当通过手势识别器滑动切换到仅点击选项卡时,在 tabbarcontroller 中切换选项卡会给出不同的结果