Selenium 即使有显式等待也会抛出 NoSuchElementException
Selenium throws NoSuchElementException even with explicit wait
我正在尝试使用 Selenium 自动执行一些 Web 测试。我写了一个登录网站的方法(见下文LoginToSite
)。
public async Task<bool> CanUserLogin()
{
var driver = new FirefoxDriver(_config["driverPath"]);
LoginToSite(driver);
//unrelated stuff, removed for brevity
}
public void LoginToSite(IWebDriver driver)
{
driver.Navigate().GoToUrl(_config["siteUrl"]);
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var result = wait.Until(x => x.FindElement(By.Name("name")));
Console.WriteLine(result.Size);
}
当我尝试使用 x => x.FindElement(By.Name("name"))
:
时,Selenium 抛出这个异常
OpenQA.Selenium.NoSuchElementException: Unable to locate element: *[name ="name"]
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
at OpenQA.Selenium.By.<>c__DisplayClass24_0.<Name>b__0(ISearchContext context)
at OpenQA.Selenium.By.FindElement(ISearchContext context)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
at REDACTED
at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition, CancellationToken token)
我已经按照 selenium documentation on WebDriverWait 中的示例进行操作,但找不到失败的任何其他原因。
当 Web 驱动程序打开时,我可以打开控制台并键入 document.getElementsByName("name")[0]
,其中 returns 元素是正确的。
页面加载不到一秒钟,我找不到任何其他元素(例如,相同的代码在按 ID 检索元素时抛出相同的异常)。
任何帮助将不胜感激,谢谢!
尝试使用隐式等待
driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 7);
我正在尝试使用 Selenium 自动执行一些 Web 测试。我写了一个登录网站的方法(见下文LoginToSite
)。
public async Task<bool> CanUserLogin()
{
var driver = new FirefoxDriver(_config["driverPath"]);
LoginToSite(driver);
//unrelated stuff, removed for brevity
}
public void LoginToSite(IWebDriver driver)
{
driver.Navigate().GoToUrl(_config["siteUrl"]);
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var result = wait.Until(x => x.FindElement(By.Name("name")));
Console.WriteLine(result.Size);
}
当我尝试使用 x => x.FindElement(By.Name("name"))
:
OpenQA.Selenium.NoSuchElementException: Unable to locate element: *[name ="name"]
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
at OpenQA.Selenium.By.<>c__DisplayClass24_0.<Name>b__0(ISearchContext context)
at OpenQA.Selenium.By.FindElement(ISearchContext context)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
at REDACTED
at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition, CancellationToken token)
我已经按照 selenium documentation on WebDriverWait 中的示例进行操作,但找不到失败的任何其他原因。
当 Web 驱动程序打开时,我可以打开控制台并键入 document.getElementsByName("name")[0]
,其中 returns 元素是正确的。
页面加载不到一秒钟,我找不到任何其他元素(例如,相同的代码在按 ID 检索元素时抛出相同的异常)。
任何帮助将不胜感激,谢谢!
尝试使用隐式等待
driver.Manage().Timeouts().ImplicitWait = new TimeSpan(0, 0, 7);