Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] [ExpectedConditions] В процессе ожидания каждые 10 секунд вываливается ошибка (NoSuchElementException).


(Alex) #1

Использую следующий метод для ожидания элемента на странице:

private void waitCounter(WebDriver driver){
		(new WebDriverWait(driver, 25)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("span[request-count='0']")));		
	}

каждые 10 секунд выскакивает exception, но ожидание продолжается:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {“method”:“css selector”,“selector”:“span[request-count=‘0’]”}
Command duration or timeout: 10.76 seconds

Я так полагаю это происходит из-за установленного в драйвере ожидания:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Но разве это правильное поведение используя ExpectedConditions? Как это исправить? Спасибо.


(Александр Шиповалов) #2

Да все верно. Установите имплицитные ожидания в 0 - перед использованием wait

driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);

(sidelnikovmike) #3

Вы используете этот метод, а он в свою очередь дергает findElement, который и выкидывает такой эксепшн.
Это нормальное поведение.
Уменьшение значения имплицидного ожидания лишь приведет к тому, что ошибка будет выскакивать не каждые 10 секунд, а каждый период времени, который вы установите(если 0 - то будет просто без остановки)


(Alex) #4

Спасибо за ответы.


(Taras) #5

ви можете ето игнорировать , посмотрите на FluentWait и метод polling i ignore


(Alex Okrushko) #6
    private void waitCounter(WebDriver driver){
	(new WebDriverWait(driver, 25)).ignoring(NoSuchElementException.class).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("span[request-count='0']")));		
}

(vmaximv) #7

WebDriverWait игнорит NoSuchElementException по дефолту.


(sidelnikovmike) #8

ну дак как я понял смущало то, что он логгируется :smile: