在 Cucumber 场景示例中使用相同的页面

Use the same page in Cucumber Scenario examples

目前使用 Protractor 5.1.0 和 cucumber-protractor-framework Javascript。

在功能文件中使用以下场景大纲:

Feature: As an online customer
I should be able to validate the Benefits Page and links on it

Background:
Given I am on the "Benefits Page"

@regression @fixup
Scenario Outline: validation of the MyPage links
When I click on the "<link>" link
Then a new tab should be opened
Then I should be directed to the "<URL>" in new window

Examples:
|link                    |URL                                      |
|Benefit (PDF)           |/guide-to-benefit.pdf                    |
|Pro Benefit (PDF)       |/professional-benefit.pdf                |
|Signature Benefit (PDF) |/signature-guide-to-benefits-revised.pdf |
|Business Benefit (PDF)  |/business-benefits.pdf                   |

页面文件如下:

var Benefits_Guide_Page = function (PageUrl) {

  this.visit = function (PageUrl) {
  browser.manage().deleteAllCookies();
  browser.get(PageUrl);
};

this.get_element = function (element_name) {
  switch (element_name) {

  //Links Navigates to different window

  case "Benefit (PDF)":
  case "Pro Benefit (PDF)":
  case "Signature Benefit (PDF)":
  case "Business Benefit (PDF)":
    return element(by.linkText(element_name));
    break;

  ... // continue element checks

每个场景打开选项卡,切换到新选项卡,验证URL,关闭新选项卡,切换到原始选项卡,然后重新加载原始选项卡页面,开始下一个 example.

我认为 中有一些答案,但我不确定是否是同一个问题。

基本上,我不需要为每个示例重新加载页面。在更大的测试环境中,这是浪费和耗时的。

我还有其他情况,我正在检查 link 在同一个 window 中加载。我只需要转到 "back" 并检查下一个 link 或同一页面锚点,而不是再次加载页面。

有什么建议吗?

场景大纲只是简明扼要地写出几个场景的一种方式。每个场景都从头开始,因此将加载初始页面。如果你想让这个更有效率,就不要使用场景大纲,少写场景。

我真的不明白为什么你需要测试浏览器是否可以导航到另一个浏览器 window,我认为我们非常有信心点击浏览器中的链接是有效的,所以你真正需要的要做的是测试链接或页面。那么你 可以写

Given I am on the benefits page
Then I should see the benefits pdf's

并引入 benefits_pdfs 集合的概念,做一些类似

的事情
benefits_pdf.each do |pdf|
  page.should have_link pdf.link
end

在您的实施中。这为您提供了一个运行速度可能提高 10 倍并提供几乎相同效用的方案。