Selenium findElement выдает исключение, когда элемент присутствует на странице, но не виден в области просмотра - PullRequest
0 голосов
/ 27 марта 2020

Следующий код прекрасно работает, когда элемент присутствует в DOM и виден в области просмотра:

WebElement button = webdriver.findElement(By.id("myButton"));

Но я не понимаю, почему он вызывает исключение, когда кнопка присутствует в DOM но не виден в окне просмотра.

Я точно знаю, что кнопка присутствует: здесь нет ajax в игре.

Как я могу проверить наличие элемента в DOM, виден ли он в окне просмотра?

Я уже видел здесь несколько полезных ссылок на stackoverflow:

{ ссылка }

Как проверить, отображается ли элемент с помощью Selenium WebDriver?

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

После еще одного исследования, я пришел к выводу:

webdriver.executeScript("arguments[0].scrollIntoView()", button);
button.click();

Должно работать, но в моем случае, из-за некоторого фиксированного заголовка bootstrap, кнопка находится в представлении, но скрыта фиксированным заголовком над ним (z-индекс). И возникает исключение при выполнении второй строки.

То же самое произошло со следующим:

Actions actions = new Actions(driver);
actions.moveToElement(button).click().build().perform();

Итак, я наконец-то решил свою проблему, имитировав щелчок в javascript:

webdriver.executeScript("arguments[0].scrollIntoView()", button);
0 голосов
/ 27 марта 2020

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

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement button = wait.until(
        ExpectedConditions.elementToBeClickable(By.id("myButton")));
Actions actions = new Actions(driver);
actions.moveToElement(button).click().build().perform();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...