黄瓜中的多个步骤定义匹配错误
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。
我最近开始使用 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。