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