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

时间:2017-10-10 10:17:32

标签: typescript protractor cucumber yarnpkg cucumberjs

我最近开始使用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

1 个答案:

答案 0 :(得分:2)

当两个步骤在其步骤定义中共享相同的正则表达式/字符串时发生不明确的错误,因为跑步者必须决定使用哪一个。

如果多个功能和方案之间存在共享步骤,最好将这些功能和方案分开,以便更容易跟踪。

请参阅我对问题的回答" What's the best way to organize feature files?"看看我如何组织我的项目。

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

示例

作为测试人员,您希望能够浏览您拥有的网页,而不会明确说明功能文件中的网址,以防URL在将来的某个时刻发生变化。< / p>

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(注意:有很多&#34;正确&#34;这样做的方法)。

这个例子对于POM来说比我在上面的例子中建议使用的要严格得多,而是存储了一个&#34; go_to&#34; &#34; urls&#34;中的方法文件在元素目录中,但如前所述,有很多&#34;对&#34;如何利用POM。