我有一个 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()");
经过几天的摆弄,我找到了解决方法。虽然在 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]);
在执行元素交互之前,您需要上面的代码(查找元素、点击等)。