t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenium ошибка ожидания элемента на странице

Теги: #<Tag:0x00007fd769e6a4e0> #<Tag:0x00007fd769e6a260> #<Tag:0x00007fd769e69c98> #<Tag:0x00007fd769e69a40> #<Tag:0x00007fd769e698d8>

Есть у меня PageObject, в нем объявлен элемент
@FindBy(id = “amount”)
private HtmlElement amountField;

При открытии страницы я жду его появления используя wait.until(…)

Но у меня тест падает с ошибкой:

org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of Amount Field (tried for 180 second(s) with 500 milliseconds interval)
Build info: version: ‘3.141.59’, revision: ‘e82be7d358’, time: ‘2018-11-14T08:17:03’
System info: host: ‘STRUCHEVA-MS-M’, ip: ‘192.168.48.9’, os.name: ‘Windows 10’, os.arch: ‘amd64’, os.version: ‘10.0’, java.version: ‘1.8.0_201’
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 86.0.4240.75, chrome: {chromedriverVersion: 85.0.4183.87 (cd6713ebf92fa…, userDataDir: C:\Users\STRUCH~1\AppData\L…}, goog:chromeOptions: {debuggerAddress: localhost:59416}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: e6b684b79f6c8d7b8944c2b6a9978b9d

При этом, элемент на странице есть. Если дебагом идти, то прям секунда задержки и все проходит.
Чем можно помочь в этой ситуации? Ведь если элемента изначально не было, то он и должен был его дождаться…

Слишком мало деталей

но по судя всему вы проверяете с помощью ExpectedConditions.visibilityOf, метод может не отработать если элемент перекрыт другим элементом, то есть как бы не виден

пробовали что нибудь еще вроде presenceOfElementLocated или брать родительский элемент?

Да, я использую ExpectedConditions.visibilityOf
presenceOfElementLocated не пробовала, как я вижу он принимает именно локатор. Скорее мне хотелось бы понимать почему не отрабатывает текущая реализация.
Вот не знаю как проверить перекрывается или нет. Элемент становится виден в течении ожидания, но почему падает?)

Скорее всего, у элемента параметр visibile: false тупо прописан и не меняется, вот селениум и думает что он невидимый. Приложите скрин элемента в DOM.

Если идти дебагом, то все проходит. Это прям секунда задержки получается. Значит с элементом все в порядке. Ощущение, что через FindBy инициализировался “несуществующий” элемент. И потом уже когда мы ждем, что он видимый, то уже не проверяем появился ли он

Похожая проблема. Удалось разобраться?

К сожалению, так и не удалось