我使用代码
driver.findElement(By.name("username")).sendKeys("name");
driver.findElement(By.name("password")).sendKeys("12345");
登录网站。有时它会工作,有时它不会,给出的错误是
线程“main”中的异常 org.openqa.selenium.NoSuchElementException: 无法找到元素: { “方法”: “姓名”, “选择器”: “用户名”}
问题在于它有时会起作用。我应该使用Byxpath()
吗?
答案 0 :(得分:2)
您可能不会等到元素加载到页面中。在selenium.isElementPresent(locator)
或类似命令命令执行之前使用selenium.isVisible(locator)
或sendKeys
是一种很好的做法。
答案 1 :(得分:2)
您可以将WebDriverWait与条件一起使用以等待元素:
public class MyTestClass{
private static final int MAX_WAIT_TIME_SEC = 60;
private WebDriverWait wait;
[...]
public void setField(String fieldname, String text){
wait = new WebDriverWait(driver, MAX_WAIT_TIME_SEC);
wait.until(new NameExpectedCondition(xpath));
WebElement element = driver.findElement(By.name(fieldname));
if(element != null){
element.sendKeys(text);
}
[...]
}
public void foo()
}
使用NameExpectedCondition:
import org.openqa.selenium.By;
public class NameExpectedCondition implements ExpectedCondition<Boolean> {
private String fieldName;
public NameExpectedCondition(String fieldName)
{
this.fieldName= fieldName;
}
public Boolean apply(WebDriver d) {
d.findElement(By.Name(fieldName));
return Boolean.TRUE;
}
}
请确保您在正确的框架中搜索元素。
答案 2 :(得分:1)
有一种解决此问题的最简单方法:
driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 10));
它只会尝试重新绑定一个元素来处理所有NoSuchElementExceptions。
答案 3 :(得分:1)
请在发送FindElement
之前添加此命令:
String strTemp = driver.PageSource;
您会看到来源未加载整个页面。