我有以下代码使用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元素都存在。这里发生了什么?
答案 0 :(得分:2)
通常这些是由javascript的异步性质引起的竞争条件。像这样添加一个等待:
browser.checkbox(:id => TOTALS).when_present.checked?