저희 팀에서는 글로벌 페이지 변수가 항상 올바른 모델을 항상 참조해야한다는 규칙을 수립했습니다. 모델을 직접 설정하는 대신 몇 가지 도우미를 사용합니다.
또한 페이지 정의와 단계가 동일한 파일로 이동한다는 규칙을 설정했습니다. 예 some_page.rb
class SomePage < SitePrism::Page
set_url '/lol'
set_url_matcher /#{@target}\/lol/
element :button, 'button'
element :some_image, 'img'
end
Given /^I have reached SomePage$/ do
load_page SomePage
end
When /^I click a button on Some Page$/ do
@page.button.click
end
Then /^I should be on Some Page$/ do
ensure_page SomePage
end
Then /^Some Page should have an image$/ do
@page.should have_some_image
end
이 이상한 것, 그리고 모범 사례의 모든 종류에 갈 수도 -하지만 내 팀을 위해 좋은 일하고있어. 각 페이지와 함께 결합 된 단계 정의를 사용하면 정의 내에서 @page가 참조하는 것을 정확히 알 수 있으며, 요소를 찾은 다음 매핑을 추가하는 것이 훨씬 쉽습니다 (또는 매핑을 더 추가 할 수 있습니다). 특정 페이지에 대해 이미 작성한 단계가 무엇인지 신속하게 파악하므로 중복되는 단계 정의가 줄어 듭니다.
드문 경우지만 한 페이지 정의가 여러 페이지에 사용되는 경우 별도의 헬퍼 파일이 있습니다.
전역 @page 변수를 설정하고 사용하는 데 도움이되는 몇 가지 도우미가 있습니다. 이들을 사용하면 또 다른 규칙은 절대로하지 않을 것입니다. @page = SomePage.new
또는 @page.should be_displayed
set_page는 글로벌 변수를 제공된 페이지의 인스턴스로 설정하는 데 사용됩니다. 또한 예상 된 페이지가 표시되는지 확인하고 page # set_up을 호출합니다. 우리의 모든 페이지는 빈 set_up 메서드가있는 masterpage 클래스에서 상속받습니다. 특정 페이지가로드 될 때 초기화 코드를 추가하기 위해 페이지에서 set_up을 정의 할 수 있습니다. 우리는 우리가 올바른 페이지에있어해야 할 때마다
def set_page page_model @page = page_model.new # Ensure the expected page is actually displayed ensure_page page_model # Call the set_up method on the page @page.set_up end
ensure_page 사용됩니다. 전역 변수가 올바른 페이지를 참조하는지 확인하고 페이지가 현재 표시되는지 확인하는 데 사용됩니다. 이는 기존의 PageModel.new.load args
대신에 사용되는 전통 PageModel.new.should be_displayed
def ensure_page page_model unless @page.is_a? page_model raise PageModelIncorrect.new "@page is a #{@page.class} when #{page_model} was expected.\nCurrent URL: #{current_url}" end @page.should be_displayed end
load_page 대신에 사용된다. 제공된 인수를 사용하여 페이지를 자동으로로드 한 다음 위 메소드를 사용하여 전역 변수를 설정하면 페이지가 표시됩니다.
def load_page(page_model, *args) page = page_model.new page.load(*args) set_page page_model end
사례를 공유해 주셔서 감사합니다. 우리 팀을 도울 것입니다. –
대단히 환영합니다! 도움이된다면 응답을 승인 된 답변으로 표시하여 더 이상 대답하지 않는 것으로 표시하십시오. 그래도 궁금한 점이 있으면 기꺼이 도와 드리겠습니다. –