我有一个带有登录页面的示例测试,我要模拟一个成功的登录,然后注销,最后使用错误的密码登录失败。当我第一次导航到登录页面时,我使用以下代码来查找元素:
entryStartingPosY
然后在清除cookie后,我导航回到相同的登录页面,并尝试使用相同的元素:
IWebElement username = wait.Until((x) => { return x.FindElement(By.Id("input-1")); });
页面中存在具有相同ID的相同元素,但是在测试中出现以下错误:
//navigating to the login page
driver.Navigate().GoToUrl(panel);
//Verifying that the page is the one i am looking for
IWebElement signUp = wait.Until((x) => { return x.FindElement(By.Id("go_sign_up")); } );
Assert.IsNotNull(signUp);
//Try to add some info to username field
username.SendKeys("blabla");
抱歉,如果信息不足,这是我第一次问问题。
答案 0 :(得分:0)
之所以发生这种情况,是因为当您离开页面并返回时,页面 DOM已刷新。
最快的解决方法是在返回页面后再次定位元素。
我还建议您阅读有关页面对象模型和使用CacheLookup的信息
答案 1 :(得分:0)
您可以将导致陈旧元素引用的代码包装到此LOC中:
int attempts = 0;
while(attempts < 2) {
try {
IWebElement username = wait.Until((x) => { return x.FindElement(By.Id("input-1")); });
result = true;
break;
} catch(StaleElementException e) {
}
attempts++;
}