为什么Ruby While语句不起作用
背景:这是使用页面对象和Rspec。页面中的对象设置正确。基本上是跳过while语句,直接检查页面上存在的变量为什么Ruby While语句不起作用,ruby,rspec,page-object-gem,Ruby,Rspec,Page Object Gem,背景:这是使用页面对象和Rspec。页面中的对象设置正确。基本上是跳过while语句,直接检查页面上存在的变量标签 它应该做的是检查标签变量是否在页面上,如果没有,则等待20秒并刷新页面,然后再次检查多达30次,如果在第30次失败,则应一起失败。如果它找到它,那么它应该再次检查并通过它 def check_label(label, current_page) labels_filter_element.click check_label_sla(label, current_page)
标签
它应该做的是检查标签
变量是否在页面上,如果没有,则等待20秒并刷新页面,然后再次检查多达30次,如果在第30次失败,则应一起失败。如果它找到它,那么它应该再次检查并通过它
def check_label(label, current_page)
labels_filter_element.click
check_label_sla(label, current_page)
current_page.text.should include label
end
def check_label_sla(label, current_page)
t = 30
i = 0
while i < t
if current_page.text.should include label
return
else
sleep(20)
current_page.refresh
i += 1
end
end
end
def检查标签(标签,当前页面)
标签\过滤器\元素。单击
检查\u标签\u sla(标签,当前页面)
当前_page.text.应包括标签
结束
def检查标签sla(标签,当前页面)
t=30
i=0
而我
如果当前_page.text.应包含标签
返回
其他的
睡眠(20)
当前页面。刷新
i+=1
结束
结束
结束
我认为如果current\u page.text.should include label
总是返回TRUE,那么就会发生什么,但我不确定。如果需要更多信息,请告诉我。我正在做以下假设:
- 您看到的行为是,首先加载页面,单击labels\u filter\u元素,标签不在页面上,测试立即失败,而不刷新页面
标签
是一个字符串
鉴于这些假设,问题在于if语句:
if current_page.text.should include label
执行if语句时,它将断言页面包含以下标签:
- 如果页面有标签,将执行If中的代码(即它将立即返回,并且
check\u label
中的断言将通过)李>
- 在页面没有标签的情况下,断言将抛出异常,导致测试立即失败(即else代码将不会执行)。因此,测试在
check\u label\u sla
方法中失败,而不是在check\u label方法的末尾失败(这使得while循环似乎不起作用)
您希望if语句检查文本是否包含在内,而不进行断言。因此,您需要:
if current_page.text.include? label
因此,您的检查标签\u sla
方法将变为:
def check_label_sla(label, current_page)
t = 30
i = 0
while i < t
if current_page.text.include? label
return
else
sleep(20)
current_page.refresh
i += 1
end
end
end
def check_label_sla(label, current_page)
30.times do
return if current_page.text.include? label
sleep(20)
current_page.refresh
end
end