如何在页面上使用多个元素进行迭代

时间:2019-01-07 15:26:33

标签: ruby capybara

我有几个按钮可以单击同一页面。如何迭代并单击它们中的每一个?

def btnConectar()


   elements = all("button[data-control-name='srp_profile_actions']").count 

    puts elements

    first("button[data-control-name='srp_profile_actions']").click 
    find("section[class=modal]")
    find("button[class='button-primary-large ml1']").click

end

2 个答案:

答案 0 :(得分:1)

all返回类似于Capybara :: Result对象的数组。您可以使用标准的ruby可枚举方法进行迭代。

all("button[data-control-name='srp_profile_actions']").each do |el|
  el.click
  find("section[class=modal]") # Not sure what this is for - if it's an expectation/assertion it should be written as such
  click_button(class: %w(button-primary-large ml1) 
end

只要单击该按钮不会导致浏览器移动到另一页,该方法便会起作用。

如果单击确实导致浏览器移至另一页,则Capybara :: Result对象中的所有其余元素将变为陈旧的(在下一次迭代中导致陈旧的元素引用错误),您将不会能够再进行迭代。如果您的情况如此,那么必须详细说明您正在做什么。单击button-primary-large按钮后,原始按钮是否仍然存在于页面上,还是可以反复单击第一个匹配按钮来进行迭代?如果它仍然存在,是否以任何方式更改它以表明它已被单击,或者页面上按钮的数量/顺序是否保证稳定?如果您在第一次和第二次迭代中发布了HTML片段,可能会有助于理解。

答案 1 :(得分:0)

 def btnConectar()

        page.all("button[data-control-name='srp_profile_actions']").each do |el|

        while page.has_css?("button[data-control-name='srp_profile_actions']")  

        el.click #Click the button
        find("section[class=modal]") #Modal mapping
        click_button(class: %w(button-primary-large ml1)) #Click the button
        sleep 3

        end

    end

end