Как проверить, все ли элементы PageObject действительны (Java, Serenity, Cucumber) - PullRequest
0 голосов
/ 24 апреля 2019

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

Веб-сайт, над которым я работаю, не имеет согласованных тегов id, и использование @FindBy () иногда требует некоторой тренировки. Я пытаюсь сделать простой процесс:

  1. Перейдите к URL-адресу PageObject
  2. проверить, все ли элементы PageObject достижимы по селену

Вам известен способ доступа ко всем элементам PageObjects без создания метода для каждого из них? Метод, который инициализирует все элементы?

1 Ответ

0 голосов
/ 24 апреля 2019

Попробовав несколько разных способов, я использовал отражение в классе, чтобы вытащить все поля, а затем использовал .isPresent();, чтобы проверить, находится ли элемент на странице. Это решение требует, чтобы этот метод помещался в каждый класс, который вы хотите протестировать, чего я пытался избежать.

Решение:

SuiteRunner

@RunWith(CucumberWithSerenity.class)
@CucumberOptions(features = "src/test/resources/features/checkElems")
public class RegressionTestSuite {}

Файл функции: CanFindElems.feature

Feature: Check if WebPage Object elements can be found

  Scenario: Check if the page's elements are reachable
    Given navigate to webpage
    Then check page elements

Тестовый класс

public class CanFindElemsTest {

  // Change the class
  ClassYouAreTesting page;

  @Given("^navigate to webpage$")
  public void navigate_to_webpage() throws Exception {

    page.open();
  }


  @Then("^check page elements$")
  public void check_page_elements() throws Exception {

    page.checkPageElementsExist();
  }
}

Класс страницы

public class SomeWebPage extends PageObject {

  @FindBy(id = "someID")
  private WebElementFacade someElement;

  @FindBy(linkText = "some text")
  private WebElementFacade someLink;

  @FindBy(className = "some-class")
  private WebElementFacade anotherElement;


  public void checkPageElementsExist() throws Exception {

    Field[] allFields = getClass().getDeclaredFields();
    for (Field field : allFields) {

      if (field.get(this) instanceof WebElementFacade) {

        WebElementFacade f = (WebElementFacade) field.get(this);

        if (!f.isPresent()) {

          System.out.println("ElementNotFound: " + field.getName());
        } else {

          System.out.println("Found: " + field.getName());
        }
      }
    }
  }

}
...