Screenplay 模式(Journey 模式)
Screenplay模式
Junit的Screenplay
举例
Actor theReceptionist = new Actor().with(WebBrowsing.ability())theReceptionist.attemptsTo( Go.to(findOwnersScreen.url()), Search.forOwnersWith(EMPTY_SEARCH_TERMS), Count.theNumberOfOwners());assertThat( theReceptionist.sawThatThe(numberOfOwners()), was(TheExpectedNumberOfOwners));复制代码
- A Task
private static String searchTerms; @Override public void performAs(Actor asAReceptionist){ asAReceptionist.attemptTo( Enter.the(searchTerms).into(findOwnersScreen.searchTerms), Click.onThe(findOwnersScreen.searchButton) ); } public SearchForOwnersWith(String searchTerms){ this.searchTerms = searchTerms; }复制代码
A Screen
@ Url("owner/find.html") public class FindOwnerScreen extends WebScreen{ @LocateBy(css="#search-owner-form input") public ScreenElement searchTerms; @LocateBy(css="##search-owner-form button") public SearchElement searchButton;复制代码
An Action
public class Enter extends WebDriverInteraction implements Perform{ private String text; private ScreenElement field; public void performAs(Actor actor){ web(actor).findElement(field.locator()).sendKeys(text); } public Enter(String text){this.text = text;} public static Enter the(String text){return new Enter(text);} public Perform into(ScreenElement field){ this.field = field; return this; } }复制代码
优越性
相比于PO模式
- screen的类更小
- 更精简更聚焦的Task类
- 可读性更高
- 继承关系简单