测者陈磊

测者的测试技术笔记:Screenplay 模式(Journey

2018-12-11  本文已影响3人  Criss陈磊

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类

可读性更高

继承关系简单

上一篇下一篇

猜你喜欢

热点阅读