ChromeDriver - 元素可以位于 Chrome v125 上,但不能位于 v126 上

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

我有一个 C# Selenium 测试,无法在 Chrome v126 上找到某个元素。这在 Chrome v125 上运行良好,并且在 Chrome v126 浏览器控制台上使用相同的 CSS 选择器也运行良好。有没有人遇到过同样的情况,有什么解决办法来克服这个问题吗?

我发现使用 JavascriptExecutor 并具有

window.document.getElementsByClassName('saveTransaction')[0].click()
在单击操作上效果很好,但这意味着我需要将所有内容转换为处理元素的方式。它证明该元素存在于 DOM 中,但不知何故我的代码在 Chrome v126 上找不到它。

window.document.getElementsByClassName('saveTransaction')[0].click()
工作正常,在 Chrome v126 控制台上使用“$$”可以使用我的 CSS 选择器正确识别元素。

//Initialize the driver as how you would normally do with ChromeOptions
var chromeOptions = new ChromeOptions();
chromeOptions.BrowserVersion = BrowserVersion;
webDriver = new RemoteWebDriver(new Uri($"http://{GridMachine}:4444/wd/hub"), chromeOptions);

//What doesn't work
webDriver.FindElement(By.ClassName("saveTransaction")).Click();

//The code below throws NoSuchElementException
var x = webDriver.FindElement(By.ClassName("saveTransaction")).Displayed;

//What works fine
var js = webDriver as IJavaScriptExecutor;
js.ExecuteScript("window.document.getElementsByClassName(\"saveTransaction\")[0].click()");
c# google-chrome selenium-webdriver selenium-chromedriver
1个回答
0
投票

经过几天的摆弄,我找到了解决方法。虽然在 Chrome v125 上运行测试时不需要使用此解决方案,但这对于 Chrome v126 来说效果很好。

var hnd = webDriver.WindowHandles;

//Update the code below depending on how many window handles you have.
webDriver.SwitchTo().Window(hnd[0]);

在执行元素交互之前,您需要上面的代码(查找元素、点击等)。

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