Watir间歇性地找不到元素

时间:2016-03-26 13:49:53

标签: ruby watir watir-webdriver

我有以下代码使用Watir检查javascript表单上的一些框。

NBA_NORTH_AMERICA = 'https://sports.bwin.com/en/sports#leagueIds=6004&sportId=7'
MONEY_LINE = 'cat_43'
TOTALS = 'cat_48'

def method

    browser = Watir::Browser.new 
    browser.goto NBA_NORTH_AMERICA
    browser.checkbox(:id => TOTALS).parent.span.click unless browser.checkbox(:id => TOTALS).checked?
    browser.checkbox(:id => MONEY_LINE).parent.span.click unless browser.checkbox(:id => MONEY_LINE).checked? == false

    browser.divs(:class => 'layout4').each do |event|

    end
    browser.close
end

它的工作时间大约是一半,但另一半却抛出了这个错误:

/var/lib/gems/1.9.1/gems/watir-webdriver-0.9.1/lib/watir-webdriver/elements/element.rb:536:in `assert_element_found': unable to locate element, using {:tag_name=>"span"} (Watir::Exception::UnknownObjectException)

在第二个复选框(Money Line)的行上。从firefox中检查我可以看到复选框和span元素都存在。这里发生了什么?

1 个答案:

答案 0 :(得分:2)

通常这些是由javascript的异步性质引起的竞争条件。像这样添加一个等待:

browser.checkbox(:id => TOTALS).when_present.checked?