Screenplay模式是一种编写高质量自动化验收测试的方法,而Serenity BDD(Behaviour-Driven Development 行为驱动开发) 为Screenplay模式提供了内置的良好支持。Screenplay模式实现能够与JUnit和Cucumber进行集成,它采用以Actor为中心的模式。

此模式以tasks、pages、questions、actor、actions、ability等构成。

可在项目中的src-main-java中创建包以存放这些不同的作用包,

package如:

data  数据获取
page 元素定位
questions verify验证
tasks 作为构建块,创建方法以供其他使用

data、page不做过多解释。

questions主要存放准确状态问题:验证文本信息、数据准确与否,如:

public static Question<String> verifyFirstLine(){return actor ->ProjectPage.LINEONE.resolveFor(actor).getText().trim();
}public static Question<String> verifySecondLine(){return actor ->ProjectPage.LINETWO.resolveFor(actor).getText().trim();
}public static Question<String> verifySecondLineStatus(){return actor -> {actor.should(seeThat(subject:"Four Line Status",verifySecondLine(),Matchers.not(value:"empty")));return true;};
}public static Question<String> verifyFourLine(){return actor ->ProjectTask.getFourLine(actor);
}public static Question<Boolean> verifyAllStatus(){return actor ->{actor.should(seeThat(subject:"The First Line Value is",verifyFirstLine(),Matchers.is(value:"good")),seeThat(subject:"The Second Line is not empty",verifySecondLineStatus(),Matchers.is(value:true)),seeThat(subject:"Four Line Status is",verifyFourLine(),Matchers.not(value:"empty"))); };
}   

tasks主要存放一些构建方法,以便questions(verify)和test这些来调用。如:

public static String getFourLine(Actor actor){return ProjectPage.LineFour.resolveFor(actor).getAttribute(s:"value").trim();
}public static Task selectProject(Actor actor,String linkNameToClick){BookPage.PAGE_LINK_TEXT.resolveAllFor(actor).forEach(ele ->{if(ele.getText().equals(linkNameToClick)){try{ele.click();}catch(ElementNotInteractableException e){logger.info(e.getMessage());WebDriver driver=BrowseTheWeb.as(actor).getDriver();JavascriptExecutor jse=(JavascriptExecutor) driver;jse.executeScript(script:"documents[0].scrollIntoView(true);",ele);jse.executeScript(script:"documents[0].click();",ele);}}});return Task.where(title:"select Project " + linkNameToClick);
}

test中的步骤主要通过when(actor)、then(actor)结合运行,清晰明了。如:

@RunWith(SerenityRunner.class)
public class ProjectFirstTestName{private final Logger logger= LoggerFactory.getLogger(ProjectFirstTestName.class);public WebDriver theBrowser;LoginData FristUser=DataObjects.instance.getBean(LoginData.class,id:"FristUser");private Actor actor;@Title("The First Project")@Beforepublic void preLogin(){actor=Actor.named("Welcome");actor.can(BrowseTheWeb.with(theBrowser));givenThat(actor).attemptsTo(Navigate.toProjectUrl());}public void ProjectFirstTestName(){logger.info("Login is Successful");when(actor).attemptsTo(Login.ValidateLoginFeature(FirstUser.getUsername(),FirstUser.getPassword()));then(actor).should(seeThat(subject:"Login in "+ FirstUser.getUser(),VerifyFirstProject.isUserVisible(FirstUser.getUser()),Matchers.is(value:true)));logger.info("Navigate to Page");when(actor).attemptsTo(ProjectTask.selectProject(actorr,linkNameToClick:"A"));then(actor).should(seeThat(subject:"A is display",VerifyFirstProject.verifyAllStatus(),Matchers.is(value:true)));}@Afterpublic void teardown(){logger.info("***End of TestCase:"+ this.getClass().getSimpleName()+"**\n\n");}}

Serenity生成的测试报告也能很好地反映测试的意图,便于阅读者理解。

Screenplay模式鼓励声明式的编写风格,易于编写和维护,有很好的灵活性,团队能更高效地进行自动化测试。

Serenity Screenplay模式相关推荐

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

    Screenplay模式 Junit的Screenplay 举例 Actor theReceptionist =newActor().with(WebBrowsing.ability()) theRe ...

  2. Serenity Screenplay pom.xml文件配置

    pom.xml内的代码设置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

  3. 【UI自动化设计模式】超越 Page Objects:使用Serenity和ScreenplayPattern实现新一代的自动化测试

    http://www.infoq.com/cn/articles/Beyond-Page-Objects-Test-Automation-Serenity-Screenplay 在如今快节奏的软件交付 ...

  4. js 获取dom离页面编剧_页面对象之外:具有宁静性和编剧模式的下一代测试自动化

    js 获取dom离页面编剧 在当今快节奏的软件交付世界中,自动化的验收测试至关重要. 一组高质量的自动验收测试可帮助您减少浪费在手动测试和修复错误上的时间,从而更快地交付有价值的功能. 与行为驱动开发 ...

  5. compose安装单个扩展_将自动化测试扩展到单个项目之外

    compose安装单个扩展 This article shows corporations that have more than one application how to increase th ...

  6. 您应该遵循的15个UI测试自动化最佳实践(上)

    本文转载自晨小菜订阅号,感谢大佬的分享 我们知道,在过去二十年UI端的自动化测试一直是我们项目上做自动化测试的重点.随着敏捷的发展,慢慢的越来越多人开始诟病UI自动化测试,觉得在UI端做自动化其稳定性 ...

  7. 大淘宝服务端技术干货沉淀和总结

    网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...

  8. python 各种模块学习

    from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...

  9. 智能合约的核心思想、语法重点、编程模式、示例、规范及架构

    目录 智能合约简介 智能合约例子 合约编程模式COP 合约语法 重难点 限制和规范 合约架构 什么是智能合约 一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行 ...

最新文章

  1. Matlab R2016a中如何完美运行“mex-setup”
  2. http路径转file会变成反斜杠_PHP session反序列化漏洞
  3. SAP-ABAP三种定义嵌套型结构的方法
  4. 今日arXiv精选 | 近期必读的5篇Transformers相关论文
  5. 微信小程序开源项目库汇总
  6. RabbitMQ消息手动应答生产者
  7. 爱奇艺深度语义表示学习的探索与实践
  8. 文本检测大满贯!自适应文本区域表示改进形状任意的文本检测
  9. 计算机偏门术语,没听说过 WinXP偏门应用技巧四则
  10. java 多线程任务队列_精简的java 线程池与任务队列
  11. 浅谈Android中的MVP架构
  12. 惠普打印机扫描软件安装
  13. Hadoop原理与安装
  14. mic in和line in
  15. linux命令之文件和目录操作
  16. 基于百度AI平台Python实现人像动漫画
  17. 常用数学公式,推导记录
  18. SAP中通过格式调整解决导出EXCEL表字段显示不全问题
  19. 河南对口计算机本科学校有哪些,河南省计算机专业对口升学能上什么大学
  20. oracle的Minus的使用

热门文章

  1. Apple MacPad Pro会是什么样?
  2. 什么是API,SDK 两者有什么关系?
  3. 职场人如何提高情商?推荐你看这本书
  4. 华为 watch fit 鸿蒙,华为新款智能手表 Watch Fit 曝光,矩形表盘,支持近 100 种运动模式...
  5. 二十年架构师整理出的Java学习路线,学完年薪百万
  6. 恢复微信撤回的图片(不容root,极其简单)
  7. 传奇黑客成『吹哨人』,推特麻烦了;谷歌20+技术学习路线;Python数据科学电子书;游戏智能体开发平台;前沿论文 | ShowMeAI资讯日报
  8. 直播当道,平台该如何做好内容审核规避风险?
  9. 亚马逊kindle设置_在亚马逊Kindle上追逐活跃的社会工程欺诈
  10. Velocity User Guide 用户手册