Chrome Webdriver 版本 106 进入异常 > uniqueContextId 未找到

问题描述 投票:0回答:3

ElementExist exception

我最近将 Chrome 及其 web 驱动程序从版本 103 更新到版本 106。所附图像中包含的之前可以正常工作的代码现在出现异常,并显示以下错误消息:

“OpenQA.Selenium.WebDriverException:参数无效:找不到 uniqueContextId(会话信息:chrome=106.0.5249.62)”

我发现抛出Exception的点如下 ExpectedConditions.ElementExists(loadingLocator)

有人有建议或已经遇到所描述的问题吗?

谢谢

exception selenium-chromedriver webdriver
3个回答
5
投票

如果您在框架或窗口之间切换并在立即搜索元素后,这可能会导致问题。如果框架已关闭,即使您切换到默认上下文,元素搜索仍然可能会转到不再存在的旧上下文,这并非完全不可能。

我会尝试让它慢一些。在切换到该帧之前检查该帧是否存在。切换回来并检查您是否确实切换到了默认上下文。检查是否没有其他框架。避免检查该框架中可能存在的元素。

在 github 上快速搜索 chrome 相关项目可以得到以下结果:

https://github.com/v8/v8/blob/9c012f1143703d0353e7a8092d1723aef870cfc3/src/inspector/v8-runtime-agent-impl.cc#L212这可能表明(考虑到存储库性质)您的网站包含一些棘手的 javascript(例如,用于打开框架)和 chrome/chromedriver/selenium 在执行时都会感到惊讶。

UPD

似乎在 Chrome/chromedriver 104(或 105)之前,允许检查默认上下文的元素而不切换到它,而当前框架不再存在(从 DOM 中删除)。这不是正确的行为,但在某个时候是允许的,异常在内部被抑制。

当您进行令人震惊的升级时,例如在版本 109 中,如果启用了实验选项,则可以可靠地重现此异常。

uniqueContextId
似乎是负责验证
am I in the right place to do this action
的机制的一部分,在本例中为框架(上下文)。不幸的是,chrome 命令行似乎没有选项来切换此行为,并且
uniqueContextId
contextId
互斥,根据 selenium 源(链接可能不再存在,只需插入活动版本而不是 v110)

在检查框架之前,您应该始终切换回框架,即使它是默认内容。没有继承权。


0
投票

当涉及到建议(不是 100% 确定的答案)时,我会检查定位器是否始终是唯一的。错误消息指出“uniqueContextId not found”,因此定位器匹配的唯一性可能很重要。

你可以尝试这样的事情:

IList<IWebElement> elements = driver.FindElements(loadingLocator);

并调查元素的数量。不过,这只是猜测。

此外,我会仔细检查 ChromeDriver 的版本,但我假设您在发布问题之前已经这样做了。


0
投票

就我而言,将网络驱动程序管理器更改为版本 5.1.0 有帮助。 Chrome 浏览器版本 118.0.5993.88.

© www.soinside.com 2019 - 2024. All rights reserved.