尽管使用了WebDriverWait,但仍然存在NoSuchElementException

时间:2016-08-04 17:01:35

标签: c# selenium

我使用Selenium定位元素并用文本填充它。当我浏览到我的URL时,会先显示一个加载页面的文本框。加载应用程序后,将显示登录用户名/密码。我只想等到显示登录用户名/密码以避免NoSuchElementException。我引用了this post但无法获得任何解决方案。

当我运行测试时,它不会等待元素出现,并且x.FindElement(By.Id("UserName")上的NoSuchElementException会立即失败。

using (IWebDriver driver = new ChromeDriver(@"<my path>"))
{
    driver.Manage().Window.Maximize();

    driver.Navigate().GoToUrl("<my url>");

    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(600));
    var userName = wait.Until(x => x.FindElement(By.Id("UserName")));

    userName.SendKeys("username");

    IWebElement pass = driver.FindElement(By.Id("Password"));
    pass.SendKeys("password");
}

我在这里做错了什么?在查找之前,我应该如何更改代码以等待UserName id出现?

1 个答案:

答案 0 :(得分:2)

我认为您需要先等待加载元素的隐身然后再去等待用户名的可见性,如下所示: -

 var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));

wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.ID("id of loading element ")));

//Now go to find username element 
var userName = wait.Until(ExpectedConditions.ElementIsVisible(By.ID("UserName")));
userName.SendKeys("username");