WebElement.isDisplayed () работает по-разному на разных машинах? - PullRequest
1 голос
/ 21 февраля 2020

У меня есть фрагмент кода, который получает веб-элемент и проверяет, отображается ли элемент.

Код:

WebElement element = getDriver().findElement(By.linkText("Expand"));
 if(element.isDisplayed()){
                printInfo("Expand is displayed");
            }
  else{
   printInfo("Expand is NOT displayed");
  }

Этот же фрагмент кода отлично работает на моем локальный компьютер в той же среде (выводится сообщение «Развернуть отображается»). Однако на удаленном компьютере (с использованием Jenkins), с тем же кодом в той же среде, происходит сбой и выполняется блок else (выводится сообщение «Expand is NOT display»).

Я могу визуально видеть, что элемент отображается в приложении во время выполнения, и синхронизация также не вызывает проблем.

Почему один и тот же фрагмент кода ведет себя по-разному на разных компьютерах, когда это одна и та же среда?

ОС на обеих машинах: MacOS.

Браузер на обеих машинах: Firefox.

1 Ответ

1 голос
/ 21 февраля 2020

isDisplayed() не запускается, если элемент виден в DOM Tree . Вместо этого вам нужно вызвать WebDriverWait для visibilityOfElementLocated() в блоке try-catch{}, и вы можете использовать следующую стратегию локатора :

try {
  new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Expand")));
  printInfo("Expand is visible");
}
catch(TimeoutException e) {
  printInfo("Expand is NOT visible");
}

Ссылка

Вы можете найти соответствующее подробное обсуждение различных Ожидаемые условия в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...