Проверка наличия элемента с объектом WebElement - PullRequest
0 голосов
/ 29 июня 2019

Мне нужно проверить, присутствует ли элемент на странице в Java Selenium.К сожалению, все объяснения по поиску делают это с FindElements (By), но у меня есть структура передачи WebElement непосредственно методу, так как мои элементы уже отправлены PageFactory.

Итак, у меня есть следующая структура:

public static void verifyElementPresentStatus(WebElement targetElement, String elementName) {
    Boolean elementPresent = MISSING PART
    StepLogger.subVerification(elementName + " should be present");
    Assert.assertTrue(
            elementPresent,
            ValidationHelper.getPresentValidation(elementName)
    );
}

, и я вызываю метод как

ExpectationHelper.verifyElementPresentStatus(
            Pages.HomePage().homeHeader,
            Pages.HomePageConstants().pageHeaderText
    );

Кто-нибудь знает способ сделать это?

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Вы не можете написать метод, который принимает WebElement в качестве аргумента и проверяет, существует ли он во всех случаях. Это связано с тем, что единственный случай, когда вы можете иметь ссылку на объект WebElement, который не существует, - это если он существовал ранее, а затем был удален из DOM («устаревший элемент»). Чтобы определить, существует ли элемент в первый раз или нет, вы можете сделать это, только приняв аргумент By вместо WebElement. Таким образом, вы можете использовать findElements и проверить, что количество> 0.

0 голосов
/ 29 июня 2019

Согласно документации интерфейса WebElement, все вызовы его методов

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

Поскольку вы получаете webElement без какой-либо проверки, рассмотрите возможность выполнения нейтрального вызова метода (без каких-либо побочных эффектов), чтобы проверить элемент на StaleElementReferenceException. Например, вы можете вызвать метод getSize(). Логика вашего метода должна выглядеть примерно так:

public static void verifyElementPresentStatus(WebElement targetElement, String elementName) {
  Boolean elementPresent = true;
  try {
    elementPresent = targetElement.getSize();
  } catch (StaleElementReferenceException e) {
    elementPresent = false;
  }
  StepLogger.subVerification(elementName + " should be present");
  Assert.assertTrue(elementPresent, ValidationHelper.getPresentValidation(elementName));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...