這是計時問題嗎?是元素(或整個頁面)AJAX加載?當您嘗試查找時,它可能不在網頁上,WebDriver通常「太快」。
要解決它,要麼是implicit or explicit 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();
...
}
截圖不顯示ID爲'ctl00_Header1_liAppointmentDiary'任何元素,不是嗎?有'Header1_liAppointmentDiary'但是... – mthmulders
您的圖像上的id是Header1_liAppointmentDiary **不** ** ctl00_Header1_liAppointmentDiary – VolkerK
元素AJAX加載?你有沒有嘗試過等待它[隱式或顯式](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits)? –