Ruby 在单页Angular应用程序上重用cucumber步骤定义

Ruby 在单页Angular应用程序上重用cucumber步骤定义,ruby,angularjs,cucumber,watir,page-object-gem,Ruby,Angularjs,Cucumber,Watir,Page Object Gem,我正在使用带有页面对象gem的watirwebdriver来驱动在AngularJS中构建的单个网页应用程序的cucumber测试 该网站采用多阶段注册流程,每次填写一系列详细信息,然后单击“下一步”按钮。(当完成该页面的所有详细信息时启用) 当我尝试重用以下步骤定义时,会出现此问题: And(/^I click next$/) do @registration = RegistrationPage.new(@browser) @registration.click_next end 它调

我正在使用带有页面对象gem的watirwebdriver来驱动在AngularJS中构建的单个网页应用程序的cucumber测试

该网站采用多阶段注册流程,每次填写一系列详细信息,然后单击“下一步”按钮。(当完成该页面的所有详细信息时启用)

当我尝试重用以下步骤定义时,会出现此问题:

And(/^I click next$/) do
 @registration = RegistrationPage.new(@browser)
 @registration.click_next
end
它调用页面对象:

class RegistrationPage
  include PageObject

  button(:next, :value => "Next")

  def click_next
   @browser.wait_while { next_element.disabled? }
   next_element.click
  end
end

对于第一部分,正确找到了“下一步”按钮,但是在第二次调用步骤定义时,无法找到该按钮,尽管该按钮已可验证地启用且在其他方面相同。

我知道您已回答了问题,但如果有助于向其他人解释:


问题很可能是,watir在每个页面上的“下一步”按钮都不相同,并且所有的“下一步”按钮都在范围内。因此,要单击正确的按钮,您必须使用所需按钮的index属性,即第二页的index:1和第三页的按钮的index 2。

如果您能提供有关如何重现该问题的更多详细信息,将有所帮助。特别是重现问题所需的HTML/Javascript。我现在已经设法自己解决了这个问题。“下一步”按钮的第二次迭代在另一个索引上运行,只需要添加一个额外的选择器来捕捉可见的按钮。