-1

背景:这是使用页面对象和 Rspec。页面,对象设置正确。基本上发生的事情是它跳过while语句并直接检查label页面上存在的变量。

它应该做的是检查label变量是否在页面上,如果没有,则等待 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

我认为正在发生的事情是 ifcurrent_page.text.should include label总是返回 TRUE,但我不确定。如果需要更多信息,请告诉我。

4

1 回答 1

1

我做出以下假设:

  • 您看到的行为是页面首次加载,labels_filter_element 被点击,标签不在页面上并且测试立即失败而没有刷新页面。
  • label是一个字符串

鉴于这些假设,问题在于 if 语句:

if current_page.text.should include label

当执行 if 语句时,它将断言页面包含标签:

  • 如果页面有标签,则执行 if 中的代码(即立即返回,并通过 in 的断言check_label)。
  • 在页面没有标签的情况下,断言将抛出异常,导致测试立即失败(即不会执行 else 代码)。所以测试在方法内部失败check_label_sla,而不是在结束时check_label method(这使得 while 循环似乎不起作用)。

您希望 if 语句检查文本是否包含在内,而不做出断言。因此你想要:

if current_page.text.include? label

所以你的check_label_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
于 2012-11-29T05:00:00.300 回答