2016-03-26 102 views
0

我有下面的代码使用Watir来检查JavaScript窗体上的一些框。Watir无法间歇地找到元素

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) 

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

回答

2

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

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

我试过这样做,但是when_present超时(30秒),尽管我可以看到这个元素显然存在。 – db579

+0

它在失败的复选框或循环内?如果它在循环中,循环中的操作是否会更改页面上的内容? – titusfortner

+0

在复选框(以及我点击检查复选框的范围) – db579