黄瓜中的多个步骤定义匹配错误

Multiple Step Definitions match error in Cucumber

我最近开始使用 Cucumber。我正在尝试使用此 link 作为基线来实现 Cucumber+Protractor+TypeScript。

我正在努力遵循这个结构, C:. | ├───.circleci | ├───.vscode | ├───e2e │ ├───features | | |--sample.feature | | |--sample2.feature | | │ └───steps | | |--pageobject1_step.ts | | |--pageobject2_step.ts | | |--common_step.ts 我在 sample 和 sample2 功能文件中都有一个简单的功能。但是,当我尝试 运行 测试时,我得到

 `Given I am on the angular.io site
   Multiple step definitions match:
     /I am on the angular.io site$/ - Yadav\Documents\angular-protractor-cucumber\node_modules\cucumber\src\support_code_library_builder\define_helpers.js:90
     I am on the angular.io site`

我读了这篇 link,其中的内容让我相信不推荐这样做。如果这是正确的,我如何使用页面对象的强大功能,更重要的是,如何解决多步骤定义问题?

这里有可重现的例子GIT

当 2 个步骤在它们的步骤定义中共享相同的 regex/string 时,就会发生模棱两可的错误,因为跑步者必须决定使用其中的哪一个。

如果多个功能和场景之间存在共享步骤,最好将它们分成公共文件,以便于跟踪。

查看我对“”问题的回答,了解我是如何组织我的项目的。

在伪代码中(Ruby 实现),我将举一个例子。

例子

作为测试人员,您希望能够浏览您拥有的网页,而无需在功能文件中明确说明 URL,以防 URL 发生变化在未来的某个时候。

urls = Project.urls # Class with url method that returns a map, where pages are the keys and urls are the values

Given 'I navigate to the {string} page' do | page |
    driver.navigate.to(urls[page.downcase])
end

这意味着在功能文件中,您将能够这样做:

Given I navigate to the "Home" page

这使步骤保持动态,便于将来重用和维护,无需重复步骤定义。

编辑

在评论中,已请求使用黄瓜的页面对象模型的工作示例。 Here's a working example on Git

写在 Ruby 中,这是一个非常简单的框架版本,表示目录结构以及我个人如何使用 POM(注意:有很多 "right" 方法可以做到这个)。

这个例子对 POM 比我在上面的例子中建议使用的要严格得多,而不是在元素目录的 "urls" 文件中存储一个 "go_to" 方法,但如前所述,有许多 "right" 方法可以利用 POM。