2013-11-12 4 views
3
WebDriverWait wait = new WebDriverWait(driver, 60) 

WebElement element = driver.findElement(By.xpath("//div[contains(text(),'Loading...')]")); 
System.out.println("Test"); 
wait.until(ExpectedConditions.not(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(text(),'Loading...')]")))); 
System.out.println("Test"); 

Попытка дождаться завершения загрузки страницы. Первый «тест» печатается в консоли, и нижеприведенное исключение печатается при исключении оператора wait.unit. Даже после исчезновения экрана загрузки wait.until все еще ждет. Уже пробовали Неповторимость элемента также и не работает, получая одно и то же исключение тайм-аута. После загрузки завершен элемент не более доступна в DOMSelenium Webdriver "Expectedconditions.not" не работает должным образом

ответ

3

вы не дожидаясь элемент, чтобы быть видимым в первом заявлении, т.е.

WebElement элемент = driver.findElement (К .xpath ("// ДИВ [содержит текст ((), 'Загрузка ...')]"));

я думаю, что это вызывает NoSuchElementException ...
вы можете попробовать следующее:

new WebDriverWait(driver,60).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(),'Loading...')]"))); 

new WebDriverWait(driver,60).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[contains(text(),'Loading...')]"))); 

приведенный выше код будет первый ждать видимости элемента, а затем его невидимость.

+0

Я уже пытался это первое утверждение работает нормально, но второе утверждение продолжает ожидать целых 60 секунд, даже после загрузки элемента нет, вот я в конце концов, дожидаясь полного 60 секунд. – Srivardhan

4

Если вы хотите, чтобы ждать, пока элемент не присутствует, а presenceOfElementLocated использование presenceOfAllElementsLocatedBy:

wait.until(ExpectedConditions.not(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//div[contains(text(),'Loading...')]")))); 

Он будет ждать, пока нет никаких элементов на странице, которые соответствуют локатора.

0

новый WebDriverWait (водитель, TimeSpan.FromSeconds (10)). До (d => d.FindElement (By.Id ("searchTextBox0")). Отображаемое)

0

Если вы будете использовать этот мультипликатор раз, создайте метод. Например. если вы будете ждать других элементов в другом месте.

public void waitForElementToBeVisible(String xpath) throws Throwable { 
    try { 
     WebDriverWait wait = new WebDriverWait(driver, 15); 
     wait.until(ExpectedConditions.or(
       ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)) 
     )); 
    } 
    catch(Exception e) { 
     System.out.println("Timeout exceeded"); 
     driver.close(); 
    } 
} 

Вы можете вызвать этот метод несколько раз. Для того, чтобы позвонить в тот, который вы застряли с ним будет

waitForElementToBeVisible("//div[contains(text(),'Loading...')]"); 
Смежные вопросы