В общем вам надо вдуматся, что есть StaleElementReferenceException.
И почему его можно схватить, даже на такой безобидной, с виду, строке как эта:
wd.findElement(By.id("setup")).click();
В общем вам надо вдуматся, что есть StaleElementReferenceException.
И почему его можно схватить, даже на такой безобидной, с виду, строке как эта:
wd.findElement(By.id("setup")).click();
На этом я ловлю NoSuchElementException
Да, так и есть, только вот он не обновляется автоматически. Так делать нельзя?
Ок, пойду гуглить…
А как вы поняли, что он не обновляется динамически? Net monitor что говорит, когда ручками очищаете инпут? Запросы идут?
При ручном очищении сетевой монитор молчит (сразу оговорюсь что смотрел встроенным в браузер).
Если кому-то ещё поможет:
Проблема найдена, таймауты решают.
Суть следующая. Веб приложение полностью построено на JAVA и JavaScripts, при загрузке страницы происходит такая штука: Элемент присутствует на странице, но ещё не успел полностью прогрузиться и попасть в дом. В этот момент идёт обращение к нему и валится исключение.
Помогла вот такая конструкция на подобных элементах:
WebDriverWait wdWait = new WebDriverWait(driver, 10);
wdWait.ignoring(InvalidSelectorException.class, StaleElementReferenceException.class);
wdWait.until(ExpectedConditions.visibilityOf(weErrorMsg));
По сути сработал совет товарища @KoNaN с использованием explicit waits. Если чей-то пост вам помог, не забываем ставить лайки.
Решение настораживает, потому что:
Ну и вообще в самом начале утверждение про то, что “элемент ещё не успел попасть в DOM” – не отражает ситуацию. Пока элемент не находится в DOM – его нет, он не может быть найден методом findElement, и поэтому проверять видимость просто не у чего. А если уж элемент вернулся из метода findElement – значит он в DOM, и тогда можно проверять видимость, но см. выше про непонятно что делающий “тюнинг” ожиданий.
Райт. А PageFactory хендлит стейлы?
Насколько я вижу из кода - идет попеременное обращение к разным PageObject без повторной инициализации.
Нет
Таки нет:
org.openqa.selenium.TimeoutException: Timed out after 180 seconds waiting for text "Update Your User Profile". Got:null Caused by: org.openqa.selenium.InvalidSelectorException: The xpath expression '//BODY' cannot be evaluated or does notresult in a WebElement (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 92 milliseconds
Фейлы рандомны - разные страницы, разные места. Не только на //body а практически везде - фреймы/прочие элементы. “Странностей” в браузере не обнаружено - на скринах “тишь да гладь”.
Пытаюсь понять что там происходит - пока безрезультатно.
Мы же говорим о возможных исключениях, которые могут возникать при проверки видимости элемента?
В этом контексте исключение InvalidSelectorException никогда не выбрасывается.
И, кстати, это какой браузер считает, что //body это невалидный селектор? Баг же
Ну тема вроде про ИЕ.
И пояснение к экшепшену как бы говорит нам: “Фиг его знает, что случилось, но у меня не получилось - нате вам ивалидселектор на всякий случай”
Баг - это то, что проинвестигированно и воспроизведено. И рандомность тут сильно усложняет дело. Логи думаю тоже много чего не дадут, я на 99% уверен, что увижу там какой-нибудь [Access denied].