C# 即使使用显式等待,Selenium也会抛出NoTouchElementException

C# 即使使用显式等待,Selenium也会抛出NoTouchElementException,c#,selenium,selenium-webdriver,.net-core,automation,C#,Selenium,Selenium Webdriver,.net Core,Automation,我正在尝试使用Selenium自动化一些web测试。我已经编写了一个登录网站的方法(请参见下面的LoginToSite) 我已经遵循了这个例子,但找不到任何其他失败的原因 当web驱动程序打开时,我可以打开控制台并键入document.getElementsByName(“name”)[0],这将正确返回元素 页面在一秒钟内加载,我找不到任何其他元素(例如,相同的代码在按ID检索元素时引发相同的异常) 任何帮助都将不胜感激,谢谢 尝试使用隐式等待 driver.Manage().Timeouts

我正在尝试使用Selenium自动化一些web测试。我已经编写了一个登录网站的方法(请参见下面的
LoginToSite

我已经遵循了这个例子,但找不到任何其他失败的原因

当web驱动程序打开时,我可以打开控制台并键入
document.getElementsByName(“name”)[0]
,这将正确返回元素

页面在一秒钟内加载,我找不到任何其他元素(例如,相同的代码在按ID检索元素时引发相同的异常)


任何帮助都将不胜感激,谢谢

尝试使用隐式等待


driver.Manage().Timeouts().ImplicitWait=newtimespan(0,0,7)

是任何iframe或shadow root下的元素。不,它是一个相当简单的层次结构:html>body>div>div>div>input[name=“name”]这很有效,谢谢!你知道有一种模式应该使用它吗?我不想在每次页面加载后都添加隐式等待(出于干净代码的原因,以及性能)。如果您使用NUnit,则可以在启动浏览器的同时在[Setup]下运行,因此它将在每次测试之前运行
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);
}
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)