2015-04-04 43 views
0

这是我失败的代码。wait_until块给出超时错误

link(:continue, :text => 'Continue Shopping') 

def verify_cart 
    wait_until(60) do 
     continue_element.visible? 
    end 
    end 

为了使它工作,我在这里试图解决方案: Inconsistently getting error (Watir::Wait::TimeoutError)Timeout::Error in Rails application using Watir但没有为我工作。

我也尝试过增加时间。

然后我试图通过增加在implicit wait从3秒到20秒,而不是使用wait_until块我简单地使用.visible?它的工作。

link(:continue, :text => 'Continue Shopping') 

continue_element.visible? 

#def verify_cart 
# wait_until(60) do 
#  continue_element.visible? 
# end 
# end 

现在的问题是,当元素在那里,为什么wait_until不停失败?

+0

@JustinKo你可以把你的想法放在这里。 – paul 2015-04-06 19:16:52

+0

这是什么意思,通过使用'continue_element.visible?'而不是'wait_until(60){continue_element.visible? }'工作?是否意味着异常消失,并且脚本的后续步骤按预期工作? 'continue_element.visible?'只是返回元素是否存在。如果您只是简单地移除了'verify_cart'方法的'wait_until'部分,那么根据脚本的写入方式,即使链接不存在,'verify_cart'也可能会通过。 – 2015-04-06 19:38:01

+0

@JustinKo元素总是在那里,它是可见的(我已经测试过)。现在的问题是,当我把这个语句'continue_element.visible?'从'wait_until'中移出时阻止它,但是当我把它放入它时,它会给出超时错误。 – paul 2015-04-07 07:17:03

回答

0
continue_element.visible? 

不会引发错误,它只是返回一个布尔值。这听起来像这个元素实际上并没有最终可见,这仍然会引发错误,无论隐含等待:

raise unless continue_element.visible? 

而且,这是一个更好的模式是:

continue.wait_until_present 

continue.when_present.click 

.present?只是意味着.exists? & & .visible?这实际上是什么你想要的,这种模式会给你一个更好的错误信息。

+0

我已经知道'.present?','.visible?'和'.exists?'之间的区别了。你错了'.visible?'。给出错误'Watir :: Exception :: UnknownObjectException:在失败时无法找到元素',我测试了它。最后,问题仍然存在**为什么wait_until()**不工作。 – paul 2015-04-04 21:07:25

+0

#visible?如果不存在则给出错误,如果存在并且不显示则返回false。 #present?如果它不存在或者不存在并且不可见,则为它不存在的情况解救错误并返回false。 听起来你的元素实际上并不可见。你能睡60天,除非element.present? – titusfortner 2015-04-05 02:27:21

+0

@paul,我认为你对'visible?'的评论混淆了Watir和Page-Object API。如果元素不存在,Watir的'visible?'会抛出异常。然而,Titus是正确的,'continue_element.visible?',即页面对象代码,如果元素不存在,将返回false。尽管有这个名字,但Page对象的可见?方法实际上调用了Watir的'present?'方法。 – 2015-04-06 19:30:06

相关问题