Так сложилось, что попал на проэкт веб сайта. В принцепе я уже достаточно много знаю о функциональном тестировании и селениуме.
Но вот незадача, я столкнулся с куками. Проблема в том что нормальной документации у Разрабов селениума на эту тему нет(можете убедится http://seleniumhq.github.io/selenium/docs/api/java/index.html). А мне просто необходимо отслеживать куки так как ими передается стек ошибок как на стороне сервера так и клиента.
Пример: принажатии на кнопку получили ошибку, она сгенерилась на странице в виде HTML-кода(к сожелению генерация происходит невсегда, а в куках стек ошибок хранится "намертво").
После возникновения ошибки, захожу в Инспектор и смотрю состояние куков после обработки события:
Ситуация следующая: использую capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager");
В одном классе у меня несколько тестов, идущих друг за другом, допустим a, b и с. На тестовом сайте имеется шапка, которая не меняется при переходе по страницам.
тест a : кликнуть на заголовок в шапке "Заголвок1" и тд
тест b : кликнуть на заголовок в шапке "Заголвок2" и тд
тест c : кликнуть на заголовок в шапке "Заголвок3" и тд
В результате первый тест проходит а следующие нет. Точнее клик по заголовку происходит, но перехода нет. Получается ошибка: не найден элемент страницы, на которую переходим.
Как я понимаю, это происходит потому что селениум уже перед тестом заранее видит элементы шапки, и что-то не успевает сделать. (Если ставить перед кликом по шапке Thread.sleep(3000); - всё ок, ошибки нет).
А так, для ожидания элементов, я использую неявные ожидания.
public void waitForElementPresent( By element) { // ждать появления элемента
webDriver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(webDriver, 20);
wait.until(ExpectedConditions.presenceOfElementLocated(element));
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
public void waitForElementVisible( By element) { // ждать видимости элемента
webDriver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(webDriver, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(element));
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}