동적 요소 유효성 검사

일반적인 테스트 자동화 문제를 해결하기 위해 ‘NoSuchElementException’와 같은 미운 오류를 해결할 수 있는 솔루션을 개발했습니다.

동적 요소 유효성 검사가 해결하는 다른 문제들은 다음과 같습니다.

  • 마우스로 작업을 수행할 때 어떤 것이 발생할 것으로 기대하는 경우
  • 테스트가 페이지로 이동할 때 우리가 기대하는 페이지에 있는지 확인한 후에 테스트를 계속 진행합니다.

작동 방식

페이지의 사용자 작업을 일종의 영향이 있는 것으로 해석합니다. 이러한 작업은 다음과 같습니다.

탐색

페이지로 이동할 때, 무조건적으로 페이지에 나타나는 요소들이 있습니다.

동적 요소 유효성 검사는 다음을 사용할 때 적용됩니다.

Runtime::Browser.visit(:gitlab, Some::Page)

클릭

테스트 내에서 클릭을 수행할 때, 어떤 일이 일어날 것으로 기대합니다. 그것은 이제 웹페이지에 구성 요소가 나타나거나 테스트가 페이지에서 완전히 이탈할 수도 있습니다.

동적 요소 유효성 검사는 다음을 사용할 때 적용됩니다.

click_element(:my_element, Some::Page)

필수 요소

정의

먼저 “필수 요소”가 무엇인지 정의하는 것이 중요합니다.

필수 요소는 사용자 입력없이 UI 구성 요소에 나타나는 가시적인 HTML 요소입니다.

“가시적”은 다음과 같이 정의될 수 있습니다.

  • 표시를 막는 CSS가 없는 것, 예를 들어, display: none 또는 width: 0px; height: 0px;
  • 사용자가 상호 작용할 수 있는 상태

“UI 구성 요소”는 다음과 같이 정의될 수 있습니다.

  • 사용자가 볼 수 있는 모든 것
  • 버튼, 텍스트 필드
  • 페이지 상단에 위치한 레이어

응용

요소를 필수로 설정하는 것은 매우 쉽습니다. elementrequired: true를 매개변수로 추가하면 해당 요소가 페이지에 나타나야 한다는 요구사항을 만들 수 있습니다.

예시

다음이 주어졌을 때…

class MyPage < Page::Base
  view 'app/views/view.html.haml' do
    element :my_element, required: true
    element :another_element, required: true
    element :conditional_element
  end

  def open_layer
    click_element(:my_element, Layer::MyLayer)
  end
end

class Layer < Page::Component
  view 'app/views/mylayer/layer.html.haml' do
    element :message_content, required: true
  end
end

탐색

다음 소스가 주어졌을 때…

Runtime::Browser.visit(:gitlab, Page::MyPage)

execute_stuff

GitLab QA를 호출하여 execute_stuff로 계속하기 전에 MyPage에서 my_elementanother_element가 페이지에 나타나는지 스캔합니다.

클릭

다음 소스가 주어졌을 때…

def open_layer
  click_element(:my_element, Layer::MyLayer)
end

GitLab QA를 호출하여 my_element을 클릭한 후에 Layer에서 message_content가 나타나는지 확인합니다.

이는 테스트를 계속하기 전에 레이어가 실제로 렌더링되었음을 의미합니다.