UI 테스트를위한 ScreenIdentifier 패턴

사진 제공 : N509FZ

자동화 된 테스트, 특히 UI 테스트에서 따라야 할 좋은 원칙은 문제를 식별하고 가능한 한 빨리 테스트에 실패하는 동시에 근본 원인을 쉽게 식별 할 수있는 오류 메시지를 제공하는 것입니다.

다음 테스트 케이스가 있다고 가정 해 보겠습니다.

  1. www.google.com을 엽니 다.
  2. "모든 것을 테스트"를 검색합니다.
  3. 첫 번째 검색 결과를 클릭하십시오

별로. 검색 결과 페이지의 문제 일 수 있습니다. 예를 들어 검색 결과가 렌더링되지 않거나 비어 있습니다. 그러나 문제 는 검색 결과 페이지가 처음에로드되지 않고 여전히 홈페이지에 있다는 것입니다. 즉, 3 단계 는 잘못된 화면에서 UI 요소 찾는 것입니다 .

두 번째 시나리오에서는 테스트가 두 번째 단계에서 이미 실패한 경우 (특히 더 복잡한 테스트에서) 상당한 분석 시간을 절약 할 수 있습니다. 여기에 실제 문제가 있기 때문입니다.

구조를위한 화면 식별자 패턴

이를 개선하기 위해 사용할 수있는 패턴은 화면 식별자 가있는 페이지 객체라고 부르는 것 입니다. 테스트에서 테스트중인 애플리케이션을 새 화면으로 전환 할 것으로 예상 될 때마다 테스트를 계속하기 전에 화면 / 페이지가 올바르게로드되는지 확인합니다. 따라서 각 화면에 표시되어야하는 하나 (또는 ​​여러 개의) UI 요소를 정의합니다. 이상적으로는 화면에 고유해야하며 빠르게로드되어야합니다. 누락 된 경우 예상 화면에 표시되지 않고 테스트에 실패한 것입니다.

다음과 같은 모습입니다 (Selenium / Selenide 및 Java를 사용하는 코드 , JustTestLah! 에서 단순화 ).

// Test code
public class GoogleSteps extends BaseSteps {
  private GooglePage google;
  private ResultsPage results;
@When("I search for {string}")
  public void search(String searchTerm) {
    google.verify().search(searchTerm).verify();
  }
}
// Page object class for the homepage
@ScreenIdentifier("SEARCH_FIELD")
public class GooglePage extends BasePage<GooglePage> {
private ResultsPage results;
public ResultsPage search(String searchTerm) {
    $("SEARCH_FIELD").sendKeys(searchTerm);
    $("SEARCH_FIELD").pressEnter();
    return results;
  }
}
// Page object UI locators for the homepage
SEARCH_FIELD:
  web:
    type: css
    value: input[name=q]
    
LOGO:
  web:
    type: id
    value: hplogo
// Page object for the search results page
@ScreenIdentifier({"SEARCH_RESULT", "RESULT_STATS"})
public class ResultsPage extends BasePage<ResultsPage> {
}
// Page object UI locators for the search results page
SEARCH_RESULT:
  web:
    type: css
    value: .g
    
RESULT_STATS:
  web:
    type: id
    value: result-stats

public T verify(int timeout) {
  Class<?> clazz = this.getClass();
  while (clazz != Base.class) {
    for (ScreenIdentifier identifiers : clazz.getAnnotationsByType(ScreenIdentifier.class)) {
      for (String identifier : identifiers.value()) {
        try {
          $(identifier).waitUntil(appear, timeout).isDisplayed();
        } catch (ElementNotFound exception) {
          throw new ScreenVerificationException(identifier, this.getClass().getSimpleName(), timeout);
        }
      }
      clazz = clazz.getSuperclass();
    }
    return (T) this;
  }

qa.justtestlah.exception.ScreenVerificationException: Expected element RESULT_STATS (id:result-stats) is not displayed on ResultsPage after 2000 milliseconds

Suggested posts

AWS Java Runtime Interface 클라이언트 소싱 열기

AWS Java Runtime Interface 클라이언트 소싱 열기

re : Invent 2020에서 AWS Lambda 함수를위한 새로운 패키징 형식이 도입되었습니다. 컨테이너 이미지. 이 기능을 통해 고객도 사용할 수있는 관리 형 기본 이미지가 많이 생겼습니다.

자바의 우선 순위 대기열

우선 순위 대기열을 사용하여 작업 예약

자바의 우선 순위 대기열

저는 최근에 Java가 컬렉션 프레임 워크의 일부로 우선 순위 대기열을 가지고 있다는 사실을 상기했습니다. 우선 순위 큐는 운영 체제에서 작업을 예약하는 첫 번째 용도 중 하나에서 이름을 가져옵니다.

Related posts

"실용적인 프로그래머"의 5 가지 필수 사항

역대 베스트셀러 코딩 북의 요점

"실용적인 프로그래머"의 5 가지 필수 사항

Pragmatic Programmer는 1999 년에 처음 출판되었으며 이후 역대 최고의 프로그래밍 책으로 선정되었습니다. 저자 Andy Hunt와 David Thomas는 Agile Manifesto의 원저자 중 하나였으며 몇 가지 심각한 자격을 가지고 있습니다.

대규모 GraphQL 쿼리 공격으로부터 보호

공격자가 공개적으로 사용 가능한 GraphQL 인터페이스를 사용하여 사이트를 스크랩하거나 서비스 거부 공격을 실행하는 방법에 대해 알아보십시오. 이들은 4 가지 방법 중 하나로이를 수행 할 수 있습니다. 단일 대형 쿼리를 신중하게 구성하여 실행하고, 관련 데이터를 가져올 수있는 병렬 쿼리를 많이 작성하고, 일괄 요청을 사용하여 많은 쿼리를 연속적으로 실행하고, 마지막으로 많은 요청을 보냅니다.

기술 인터뷰의 사회적 구성 요소

코딩 문제는 스트레스가 많지만 스트레스에 대한 당신의 반응은 당신의 기술적 능력보다 더 크게 말합니다.

기술 인터뷰의 사회적 구성 요소

기술 업계의 직책을 위해 인터뷰 할 때 일반적으로 제안을 고려하기 전에 최소한 3 차례의 인터뷰를 거치게됩니다. 라운드는 일반적으로 다음과 같습니다. 그렇게 생각하면 잘못된 것입니다.

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자의 3 가지 행동 특성

훌륭한 개발자를 만드는 비 기술적 인 것들 나는이 기사를 작성하는 것을 한동안 미루고 있습니다. 나는 그것을 작성할 자격이 있다고 생각하지 못했습니다. 오늘은 쓸 때라고 생각했습니다.