watir-webdriver を使用した Ruby アプリケーションの Web テスト アプリケーションでは、ページに存在するがまだ表示されていない要素が表示されるまでに最大 30 秒かかるコードを追加しました (AJAX、JavaScript、パフォーマンスなどにより)。 . テストされているルーチンは次のとおりです。
start_time = Time.now
while !visible? do
@logger.info "!visible is true, looping"
sleep 1
if Time.now - start_time > 30
@logger.debug("error while checking for visible")
raise ElementHiddenError, element_hidden_message
end
end
これをテストするために使用される RSpec は次のとおりです。
...
it "raises ElementHiddenError if element is hidden" do
element.should_receive(:visible?).and_return(false)
expect { proxy.set('something') }.to raise_error(ElementHiddenError)
end
....
この RSpec を実行すると、次のエラーが表示されます。
1)
'ElementProxy#set raises ElementHiddenError if element is hidden' FAILED
expected ElementHiddenError but nothing was raised
./spec/element_proxy_spec.rb:144:in `(root)'
org/jruby/RubyKernel.java:2043:in `instance_eval'
./spec/spec_helper.rb:68:in `timeout'
org/jruby/RubyArray.java:1614:in `each'
org/jruby/RubyArray.java:1614:in `each'
org/jruby/RubyKernel.java:1052:in `load'
ループをコメントアウトすることで、この RSpec を渡すことができます。
#start_time = Time.now
while !visible? do
@logger.info "!visible is true, looping"
sleep 1
#if Time.now - start_time > 30
@logger.debug("error while checking for visible")
raise ElementHiddenError, element_hidden_message
#end
end
私はこのコードの最初の作成者ではありませんが、このテストに影響を与えている RSpec の Time または sleep で何かが起こっているようです。
このルーチンはほぼすべてのコマンド セットで使用されているため、この問題をデバッグする方法についてアイデアをいただければ幸いです。遅延はアプリケーションで機能しますが、RSpec を通過しません。
ありがとう。