3

我正在使用 watir-webdriver (0.6.4) gem 编写一个 Ruby (1.9.3) 脚本(我的第一个)。我正在使用它以设定的时间间隔打开一个站点,发布一些数据,然后查看页面上是否出现文本值。

如果我只是在页面加载后寻找出现在页面上的单词“hello”,我可以使用以下命令:

Watir::Wait.until(timeout = 10) {b.text.include? 'hello'}

但是,我正在寻找“你好”这个词或“再见”这个词,所以在功能上我想这样做:

Watir::Wait.until(timeout = 10) {b.text.include? 'hello' or b.text.include? 'goodbye'}

但显然这不是合法的语法。我目前的工作是尝试第一个条件(检查'hello'),当发生超时异常时(假设未找到'hello'),尝试第二个条件(检查'goodbye')。似乎效率低下(等待超时)。有没有更好的办法?

4

3 回答 3

4

使用||代替,or因为它比后者具有更高的优先级:

Watir::Wait.until(timeout = 10) { b.text.include?('hello') || b.text.include?('goodbye') }
于 2013-07-21T16:05:13.753 回答
1

如有疑问,请添加更多括号。

我不知道 ruby​​ 解析器如何工作的细节,但我能理解为什么

b.text.include? 'hello' or b.text.include? 'goodbye'

会引起问题。尝试类似:

(b.text.include?('hello')) or (b.text.include?('goodbye')) 

或者,作为一个更简单的解决方案,您可以使用正则表达式:

/hello|goodbye/ === b.text
于 2013-07-20T22:51:53.083 回答
0

我建议您先缓存 b.text ,并避免在方法调用中分配:

timeout = 10
Watir::Wait.until timeout do
  txt = b.text
  txt.include? 'hello' or txt.include? 'goodbye'
end

如果您了解 和 之间的区别,那很好||oror在这种特殊情况下使用是可以的。

于 2013-07-21T18:03:07.940 回答