2017-11-01 5 views
0

읽기 SeleniumHQ's pageobject documentation 그들은 다른 페이지로 이동하지 않는 메서드에서 "this"를 반환하는 예제를 지정합니다. 내 질문은 왜?셀레늄 페이지 개체 : 왜 이것을 반환해야합니까?

아마 페이지 개체의 상태가 이유 일 수 있다고 생각했지만 페이지 자체 (실제 UI 페이지)는 상태가 변경되거나 새로 고침 될 수 있지만 페이지 개체 자체는 변경되지 않을 수 있습니다. Page Factory과 @FindBy 주석은 이미 호출 될 때마다 각 WebElement가 발견되도록 보장하므로 요소의 상태가이 경우에는 적절하지 않은 것으로 보입니다.

답변

3

public LoginPage typeUsername(String username) { 
    driver.findElement(usernameLocator).sendKeys(username); 
    return this;  
} 

public LoginPage typePassword(String password) { 
    driver.findElement(passwordLocator).sendKeys(password); 
    return this;  
} 

public HomePage submitLogin() { 
    driver.findElement(loginButtonLocator).submit(); 
    return new HomePage(driver);  
} 

지금 우리는 페이지 객체가 page로 만들 만들 수 있다고 가정 자신의 예를 생각해 보자. 당신은 아무것도를 반환하지 않은 경우 코드는

page.typeUsername("tarun"); 
page.typePassword("lalwani"); 
HomePage newPage = page.submitLogin() 

싶습니다 그러나 당신이 돌아올 때, 당신이 방법 체인을 수행 할 수 있습니다. 당신이 당신에게 훨씬 더 우아한 IDE 인텔리 일부 코딩과 노력을 절약 할 수 볼 수 있듯이 그래서

HomePage newPage = page.typeUsername("tarun").typePassword("lalwani").submitLogin() 

아래처럼 사용할 수 있습니다

+0

답변과 예제를 보내 주셔서 감사합니다. 이것은 실제로 의미가 있습니다. 추가시 아무런 결과가 없으며 구현/테스트 측에 일부 코드를 저장하는 새로운 옵션을 제공합니다. – James

0

이 수 방법 체인, 또한 그것을 Tarun의 대답에서 설명하지만,로 흐름을 캡처합니다. 로그인 페이지에서 로그인하여 홈 페이지로 이동하면 로그인 메소드는 홈 페이지 페이지 객체를 반환합니다. 해당 플로우가 변경된 경우 로그인 메소드를 업데이트하여 다른 페이지 오브젝트를 리턴하면 IDE에서 플로우가 실패하는 오류가 발생할 수 있습니다. 그것은 당신이 빨리 고칠 필요가 장소를 찾을 수 있습니다.

그렇다고해서 내 메서드에서 페이지 개체를 반환하지 않습니다. 나는 페이지 객체를위한 메소드 체이닝의 큰 팬이 아니다. 나는 당신이 너무 많은 방법을 함께 묶어서 당신이 어느 페이지에 있는지 추적 할 수 없기 때문에 그것이 테스트 흐름을 모호하게 만든다고 생각한다.

페이지 객체를 반환하면 오류 사례 등을위한 추가 메서드를 작성해야합니다.이 예에서 확인할 수 있습니다. 홈 페이지를 반환하는 submitLogin() 메서드와 로그인 페이지를 반환하는 submitLoginExpectingFailure() 등이 있습니다. 필자는 여분의 코드와 테스트 흐름을 읽는 데 어려움을 짊어지면서 얻는 이점을 발견하지 못했습니다.

관련 문제