这是时间问题吗?元素(或整个页面)是否加载了 AJAX?当您尝试查找它时,它可能不存在于页面上,WebDriver 通常“太快”。
要解决它,要么是隐式的,要么是显式的 wait。
隐式等待方式。由于隐式等待集,如果元素没有立即出现(这是异步请求的情况),这将尝试等待元素出现在页面上,直到它超时并照常抛出:
// Sooner, usually right after your driver instance is created.
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Your method, unchanged.
@Test
public void Appointments() {
...
driver.findElement(By.id("ctl00_Header1_liAppointmentDiary")).doSomethingWithIt();
...
}
显式等待方式。这只会在寻找它时等待这个元素出现在页面上。使用ExpectedConditions
该类,您也可以等待不同的事情 - 元素可见、可点击等:
import static org.openqa.selenium.support.ui.ExpectedConditions.*;
@Test
public void Appointments() {
...
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(presenceOfElementLocated(By.id("ctl00_Header1_liAppointmentDiary")))
.doSomethingwithIt();
...
}