为什么 Selenium 的显式等待在 C# 中不起作用?

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

以下代码使用 Selenium 库。问题是跟踪命令永远不会被打印,因为它应该被打印 n 次直到元素变得可见。

WebDriverWait wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(10), TimeSpan.FromMilliseconds(500));
driver.Navigate().GoToUrl("test.com");
//  Thread.Sleep(1000);
wait.Until(_ =>
{
    Trace.WriteLine("aa");
    return ExpectedConditions.ElementIsVisible(By.XPath("//button[@data-a-target='change-country-button']"));
});

当我激活注释行时,它会起作用(大多数时候)。

c# selenium-webdriver selenium-chromedriver
1个回答
0
投票

wait
对象最好仅与
ExpectedConditions
结合使用,并且
ExpectedConditions
不能在循环中工作。

因此,

Until
中的两行不会在任何循环中执行,aa也不会按照您的预期在循环中打印。


更新

理想情况下,包含 WebDriverWait 的代码行应该是:

WebDriverWait wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(5));
IWebElement myElement = wait.Until(e => e.FindElement(By.XPath("//button[@data-a-target='change-country-button']")));

一行:

IWebElement myElement = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(5)).Until(e => e.FindElement(By.XPath("//button[@data-a-target='change-country-button']")));
© www.soinside.com 2019 - 2024. All rights reserved.