2017-12-29 33 views
0

コンテキスト:私のRSpecの中(Rubyとカピバラを使用して)rspecで要素(ボタン)が「クリック可能」かどうかを検出できますか?

  1. 私は私のアプリでアクションをテストするためのリンクをクリックしてください:私のアプリへの分岐を追加します。
  2. モーダルウィンドウでを開き、ブランチを選択してから、アプリケーションにブランチを追加するために「送信」ボタンをクリックします。 「送信」をクリックすると、モーダルウィンドウが閉じます。
  3. rspecsは、メイン画面の[保存]をクリックすると、アプリケーションの状態を保存します(そして、ブランチの追加を効果的に保存します)。

問題:(一見)ブランチを選択するために使用されてモーダルウィンドウがまだ存在している間に、メイン画面上の「保存」ボタンをクリックしようとしているので、RSpecのが失敗しています。このテストでは、「保存」ボタンコンポーネントが見つからないとは言わず、クリックすることはできません。

ログのエラーは次のとおりです。

[...]Save</button> is not clickable at point (692, 23). Other element would receive the click[...]落とし穴:このRSpecのは、それは私のローカルサーバーに対して実行されたときのように、一部の環境では正常に渡しますが、それはときにそれを失敗しますオートメーションサーバーによって実行されます。したがって、このテストは「フレーク」とタグ付けされています。

可能な解決策:我々はこれまでにしようとしているもの:私たちの「クリック設定」の周り

  • プレイ、我々は「準備状態」にし、モーダルウィンドウが消えていることであることを確認すること。私たちは同じエラーを繰り返したので、これで失敗しました。

  • 「待機」を実装します。モーダルウィンドウが存在するモーダルウィンドウのボタンを「提出」場合

    XYZ.add_new_branch_name(@branch_name) while Utilities.element_visible?(:xpath, myElement) sleep(0.5) end XYZ.save

while条件のチェックを存在するように見えたしながら、私たちは少しのためにスリープ状態にループを追加しました。 element_visible機能はfindはすでにボタンが存在しているように見えますがクリックできない可能性があることを考慮に入れる必要がある場合

find(method,element).visible? 

しかしが、私はわからない使用しています。

これはまだ失敗したので、我々はボタンを「保存」をクリックする前に、モーダルがなくなっていることを確認するためにすべての私たちの努力にもかかわらず、私が尋ねるTOTたい:

はへの適切な方法はありますモーダルウィンドウの背後にある要素がクリック可能かどうかを検出するまたはrspecsを使用していないかどうかを検出しますか?

答えて

1

findは、「クリック可能性」ではなく「可視性」のみを気にします(また、さまざまなドライバが「可視性」とは多少異なる解釈を持つ可能性があります)。あなたが見ているフレークの理由は、モーダルアニメーションのタイミングに影響を与える、テストを実行しているマシンの速度の可能性が最も高いからです。この問題を解決する最善の方法は、テストモードでアニメーションを無効にすることです(アニメーションに使用するライブラリやCSSに依存します)。もう1つの方法は、「保存」ボタンをクリックする前にモーダルが消えていることを確認することですが、独自のループを作成するのではなく、カピバラ提供のメソッド(待機/再試行の動作を含む)を使用するだけですそれのために。

expect(page).not_to have_css('css selector of the modal') # RSpec version 
assert_no_css('css selector of the modal') # minitest version 

エラーからマウスの位置を確認した後に、画面サイズとスクロールの可能性があります。ページが '保存'ボタンに移動するためにスクロールされなければならない場合、(692,23)ボタンを固定ヘッダーの後ろに置くと(ボタンをクリックしようとする前にスクリーンショットを撮ることで確認できるはずです)あなたがボタンをクリックするのに使用しているドライバはありません。その場合は、execute_scriptを使用してページを別の場所にスクロールして、ページ上にボタンが表示されないようにしたり、「ブラウザ」のサイズを大きくしてスクロールする必要はありません。

関連する問題