如何验证页面上的所有元素?

How to verify all elements on the page?

我想验证页面上是否存在所有需要的元素。 我可以在场景大纲的示例部分列出它们。例如:

  Scenario Outline: I am able to see all elements on My Page
    When I am on my page
    Then I should see the following <element> My Menu
    Examples:
     | element         |
     | MENU button     |
     | MY logo         |
     | MY_1 link       |
     | MY_2 link       |
     | Button_1 button |
     | Button_2 button |  
     | Loggin button   |

每行运行一个单独的方法来验证页面上元素的存在。问题是 - 页面已重新加载。 如何以更合适的方式解决问题?

你不需要场景大纲。您只需要一个步骤来验证 table.

中的所有元素
Scenario: I am able to see all elements on My Page
    When I am on my page
    Then I should see the following elements in My Menu
     | MENU button     |
     | MY logo         |
     | MY_1 link       |
     | MY_2 link       |
     | Button_1 button |
     | Button_2 button |  
     | Loggin button   |

您可以在哪里使用 table 作为数组的数组:

Then(/^I should see the following elements in My Menu$/) do |table|
  table.raw.each do |menu_item|
    @my_page_object.menu(menu_item).should == true
  end
end


When(/^I am on my page$/) do
  @my_page_object = MyPageObject.new(browser)
end

首先,使用场景大纲将为您要测试的每个元素生成 1 个场景。这有巨大的 运行 时间成本,不是要走的路。

其次,将所有这些信息都放在场景中也是非常昂贵且低效的。 Gherkin 场景应该在业务级别而不是开发人员级别进行讨论,因此我将其重写为

Scenario: I am able to see all elements on Foo page
  When I am on foo page
  Then I should see all the foo elements

并用

之类的东西实现它
Then "I should see all the foo elements" do
  expect(should_see_all_foo_elements).to be true
end

现在您可以制作一个辅助模块来完成这项工作

module FooPageStepHelper
  def should_see_all_foo_elements
    find('h1', text: /foo/) &&
    ...
  end
end
World FooPageStepHelper

现在foo页面获取新元素时,只需在一个文件中更改一行。请注意,当您添加或删除元素时,业务需求(所有元素都应出现在页面上)不会改变

(n.b。您可以通过多种方式改进辅助函数,以便在出现问题时获得更好的信息,甚至输出列出存在的元素)