我使用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之前等待它出现?
发布于 2016-08-05 01:39:41
我认为你需要先等待加载元素不可见,然后再去等待用户名的可见性,如下所示:-
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");https://stackoverflow.com/questions/38773372
复制相似问题