在遍历列表Ruby

时间:2018-10-02 10:53:10

标签: ruby testing watir

我有以下脚本遍历元素列表:

  $browser.divs(class:'menu-index-page__menu-category').map do |cat|
  cate = cat.h3.text
  puts cate

  cc = cat.ul(class:'menu-index-page__items')
  cc.lis(class:'menu-index-page__item').each do |lit|
    lit.fire_event :click
    sleep(5)

有时,班级列表的名称将更改为:

menu-index-page__item menu-index-page__item--unavailable

这会破坏脚本,我希望能够在出现脚本时跳过此脚本并继续使用原始脚本。

enter image description here

2 个答案:

答案 0 :(得分:1)

当您使用lis using类包含lis时,必须小心,因为使用menu-index-page__item进行定位时,它会定位包含的所有内容 menu-index-page__item,因此它会定位{{1 }}。因此,尝试在此位置形成xpath,它将起作用

menu-index-page__item menu-index-page__item--unavailable

或者您可以通过这种方式排除特定列表

$browser.divs(class: 'menu-index-page__menu-category').map do |cat|
  cate = cat.h3.text
  puts cate

  cc = cat.ul(class: 'menu-index-page__items')
  cc.lis(xpath: "//li[@class='menu-index-page__item']").each do |lit|
    lit.fire_event :click
  end
end

也永远不要通过$browser.divs(class:'menu-index-page__menu-category').map do |cat| cate = cat.h3.text puts cate cc = cat.ul(class:'menu-index-page__items') cc.lis(xpath: "//li[not(@class=menu-index-page__item menu-index-page__item--unavailable')]").each do |lit| lit.fire_event :click end end 进行点击,因为这是JavaScript的点击,不是硒的点击,您会丢失许多在点击后触发的事件。

执行

fireevent

答案 1 :(得分:1)

假设您使用的是Watir v6.5 +,则:class定位器支持排除类。您可以通过执行以下操作找到所有包含类“ a”但不包括“ b”的元素:

browser.elements(class: ['a', '!b'])

对于您的特定示例,您可以执行以下操作:

cc.lis(class: ['menu-index-page__item', '!menu-index-page__item--unavailable']).each do |lit|
  # your actions on lit
end