我有以下脚本遍历元素列表:
$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
这会破坏脚本,我希望能够在出现脚本时跳过此脚本并继续使用原始脚本。
答案 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