找到存在于多个地方但具有相同id,class的特定元素

时间:2016-06-01 23:02:58

标签: ruby watir pageobjects

如果元素存在于页面的多个位置但在同一个类下具有相同的id,如何查找? 例如: 有两个具有相同ID的文本字段,我想选择第二个。 它只在我写watir / ruby​​时使用(不使用页面对象) @ b.text_fields(:id =>'color')。last.set“red”

但到目前为止,我还没有成功使用页面对象。

提前致谢

2 个答案:

答案 0 :(得分:1)

如评论中所述,最佳解决方案是更新字段以获得唯一ID。

但是,假设不可能,您可以使用:index定位器解决问题。以下页面对象找到第二个颜色字段,相当于Watir' @b.text_field(:id => 'color', :index => 1).set

class MyPage
  include PageObject

  text_field(:color_1, id: 'color', index: 0)
  text_field(:color_2, id: 'color', index: 1)
end

将被称为:

page = MyPage.new(browser)
page.color_1 = 'red'
page.color_2 = 'blue'

如果您实际上是在尝试最后一个字段,即复制@b.text_fields(:id => 'color').last.set,那么:index将是" -1":

text_field(:color_2, id: 'color', index: -1)

请注意,在方法中动态定位字段时(与访问者定义相反),可以执行类似的操作:

class MyPage
  include PageObject

  def set_colors(color_1, color_2)
    text_field_element(id: 'color', index: 0).value = color_1
    text_field_element(id: 'color', index: 1).value = color_2
  end
end

答案 1 :(得分:0)

someData = sock.recv(1024)

这可以解决您的问题。