2012-02-02 2 views
3

웹 UI 테스트를 자동화 할 때 테스트를 구성하여 유지 관리가 가능하고 코드 중복을 최소화 할 수 있습니다. 갈 길은 Page Object pattern입니다.페이지 개체 패턴 및 대안

실제 프로젝트에서 사용해 보셨습니까? 대안이 있습니까? 어떻게 복잡한 사이트를 모델링합니까 (몇 가지 중첩 된 마스터 페이지, 팝업, 미친 유효성 ​​검사가 포함 된 대형 양식)? 나는 일반적인 패턴뿐만 아니라 특정 경우 (셀레늄/ASP.NET MVC/NUnit)에 관심이 있어요.

답변

5

많은 질문을 하셨는데, 몇 가지 답변을 드리겠습니다.

Selenium을 사용하는 웹 응용 프로그램에서 페이지 개체를 사용했으며 데스크톱 WinForms 응용 프로그램에서도 페이지 개체를 사용했습니다 (페이지 개체가 아니라 페이지 개체와 마찬가지로 같은 방식으로 사용 했음 - 개체보기?). 내 평결은 위대한 작품이며, 나는 확실히 그것을 권하고 싶습니다.

여기 테스트가 어떻게 보이는지에 대한 간단한 예입니다, 그런데 우리가 쓴 : 여기

[Test] 
public void AccountPageNameIsLoggedInUsersName() 
{ 
    FirstPage() // Returns FirstPage 
     .LoginAs("tobbe", "s3cr3t") // Returns LoggedInPage 
     .ClickOnMyAccount() // Returns MyAccountPage 
     .AssertThat(p => p.Name, Is.EqualTo("tobbe")); // p is of type MyAccountPage 
} 

는 셀레늄의 마법은 FirstPage() 메소드 및 페이지 내부에 배치됩니다. 이렇게하면 테스트에서 불필요한 구현 세부 사항을 모두 숨길 수 있습니다. 방법을 구현하는 방법을 알 수 있습니다.

셀레늄을 페이지 내부에 숨겨서 보너스를 얻으면 테스트를 변경하지 않고 예를 들어로 변환 할 수 있습니다. ModelObject-View-Presenter 테스트에서 PageObject가 뷰를 나타냅니다 (WinForms 앱에서와 비슷합니다). 마스터 페이지에 관한

은, 우리가 한 일은 우리가 그 인터페이스의 인터페이스와 페이지와 생성 된 확장 메서드를 장식한다는 것입니다 : 복잡한 페이지 내 블로그에 개체에 대해

public class LoggedInPage : Page<LoggedInPage>, IMainMenuHolder { ... } 

public static class MainMenuHolderExtensions 
{ 
    public static MyAccountPage ClickOnMyAccount(this IMainMenuHoder me) { ... } 
} 
2

의미가있는대로 사용하기 시작했습니다. 그러나 우리는 우리 자신이 공통적 인 코드를 쓰고 싶지 않았기 때문에 우리가 활용할 수있는 라이브러리를 둘러 보았습니다. Geb을 찾았습니다. 우리는 이미 Spock을 사용하고 있으므로 Geb + Spock은 매우 잘 맞습니다.