-1

背景: これは page-object と Rspec を使用しています。ページ、オブジェクトが正しく設定されています。label基本的に何が起こっているかというと、while ステートメントをスキップして、ページに存在する変数のチェックに直接進むことです。

すべきことは、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

何が起こっているかcurrent_page.text.should include labelは、常に TRUE を返す場合だと思いますが、よくわかりません。さらに情報が必要な場合は、お知らせください。

4

1 に答える 1

1

私は次の仮定をしています:

  • 表示されている動作は、ページが最初に読み込まれ、labels_filter_element がクリックされ、ラベルがページになく、ページを更新せずにテストがすぐに失敗することです。
  • label文字列です

これらの仮定を考えると、問題は if ステートメントにあります。

if current_page.text.should include label

if ステートメントが実行されると、ページにラベルが含まれていることがアサートされます。

  • ページにラベルがある場合、if 内のコードが実行されます (つまり、すぐに返され、内のアサーション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 に答える