javascript - 页面对象模型或 JavaScript 测试替代方案?

标签 javascript webdriver cucumberjs

页面对象模型仍然是自动化 Web 应用程序的最佳方式吗?

对我来说,剧本模式似乎是一种更好的管理方式。

或者使用 JavaScript 替代方案,例如使用 Cucumber.js 和 WebdriverIO 进行验收测试。

最佳答案

你的问题听起来好像只有一个答案,但实际上,如果你编码正确,你可以将它们合并在一起。

页面对象模型

这有利于将页面上的元素与其余代码分开。如果实现正确,只需更改 POM 中的一行,即可针对使用该页面的所有场景更正该页面上的更改。

nextButton.click();
fullName.sendKeys("John Doe");

剧本模式

这有利于分离不同页面、不同工作流程上发生的操作。

james.attemptsTo(
   goToTheNextPage(),
   fillOutHisDetails()
);

如果旅程的工作流程略有变化,则您可以简单地重新排序剧本模式,或删除不再需要的操作。 在上面的示例中,如果企业决定注册表单应该是单页而不是多页,则删除这一行会更有意义:

goToTheNextPage(),

而不是删除我本来放入的 2:

driver.findElement({css:"#next"}).click();
driver.findElement({css:"#registrationDetails"});

CucumberJS + WebdriverIO

这很好地用纯商业语言来描述场景的信息。

Scenario: I am filling out the registration form
   Given I am a new user
     And I want to register for an account
   When I fill out the registration form
   Then I should be able to log in

合并它们

如果您想要真正人类可读的代码,您可以合并所有这 3 个代码。

您拥有业务级语言的功能文件。 您已根据剧本模式编写了步骤定义。 您已使用页面对象模型编写了剧本模式步骤。

这可能看起来很多层,但这意味着业务将能够理解场景,测试人员和开发人员回顾代码将了解某个旅程的工作流程,并进一步查看代码调试将允许测试人员通过仅更改一行代码来更改多个旅程中的元素值。

关于javascript - 页面对象模型或 JavaScript 测试替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41716267/

相关文章:

javascript - 我有 2 个状态,但两个状态都在更新,即使我只 setState 中的一个

java - WebDriver 打开新标签

reactjs - 通过 XPath 获取 tr 中特定 td 的索引

javascript - 使用JQuery弹出框

javascript - 存储来自不同 Intent 的多个参数

java - 从 json 文件填充 Extjs 网格

java - 在 Java 中使用 if/else 处理警报

linux - (Watir-)Webdriver 在 Fedora 14 w/Firefox 10 上找不到稳定的 Firefox 连接

javascript - 如何验证元素是否存在于 CucumberJS 和 Protractor 中?

node.js - cucumber.js 步骤定义因第一步超时错误而失败