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

时间:2015-07-29 12:37:17

标签: java cucumber

我想验证页面上是否存在所有需要的元素。 我可以在Scenario Outline的Examples部分中列出它们。例如:

  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   |

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

2 个答案:

答案 0 :(得分:1)

您不需要方案大纲。您只需要一个验证表中所有元素的步骤。

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   |

您可以将表用作数组数组:

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 :(得分:0)

首先,使用场景大纲将为您要测试的每个元素生成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。您可以通过多种方式改进辅助函数,以便在出现问题时获得更好的信息,甚至输出列出存在的元素)