web-dev-qa-db-ja.com

Seleniumを使用して自動テスト実行中にデバッガーで一時停止されたオーバーレイを処理する方法

これにアクセスしようとするたびに website を開いて google-chrome-devtools UIにメッセージとオーバーレイが表示されているため、インスペクタで要素を検査できません_Paused in debugger_

このディスカッションの支持され承認された回答 は、[マウス]にブレークポイントを設定した場合、[ソース]タブを確認し、[イベントリスナーのブレークポイント]パネルを確認するように指示しています。 Sources-> EventListenerBreakpointが設定されていないことを確認しました。

このディスカッションの支持され承認された回答 は、8角形の小さな停止/一時停止記号(Chrome "Sources"の左下)が色付けされている(青または紫)選択したWebサイトでなぜそれを追加する必要があるのか​​わかりません。

スナップショット:

DebuggerPaused

この議論の賛成および承認された回答 は、手動ステップについて語っています。

すべての解決策は手動プロセスに向けられているようです。しかし、この問題は SeleniumgetPageSource()を実行できないことの背後にある根本的な原因のようです。

コードトライアル:

_System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("disable-infobars");
options.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(options);
driver.get("http://rd.huangpuqu.sh.cn/website/html/shprd/shprd_tpxw/List/list_0.htm");
_

出力:Chromeが開きますが、URLに移動しません。

だから私の質問は:

  • _Paused in debugger_エラーはどの場合に発生しますか?
  • フロントエンド開発からのエラーですか?
  • 自動テストからSeleniumの間にこのエラーを回避するにはどうすればよいですか?
16
DebanjanB
  • Paused in debuggerエラーはどの場合に発生しますか?

    開発ツールを開いてこのページにアクセスしているときはいつでも。 debugger;行はJavaScriptの実行を一時停止しますが、開発ツールが閉じている場合、ブラウザはJavaScriptの実行を無視します。

  • フロントエンド開発からのエラーですか?

    この場合、いいえ、彼らは意図的にあなたを締め出そうとしています。この関数の目的は、実行を一時停止し、再開に100ミリ秒以上かかる場合にブラウザを別のページにリダイレクトすることです。これは、Seleniumのような自動クローラーを妨害するように設計されていると思います。通常のユーザーは影響を受けず、人間の開発者がハッキングするだけだからです。

  • Seleniumを介した自動テスト中にこのエラーを回避するにはどうすればよいですか?

私の最初の推奨事項は、それがオプションである場合、Seleniumをヘッドレスで実行してみることです。そうでない場合はホットキーを使用して実行を再開します(F8)。キープレスを生成するために好きな方法を使用できます。 Java.awtパッケージを使用すると、次のようになります。

Robot robot = null;
try
{
   robot = new Robot();
}
catch(Exception e)
{
   //handle failure
}
robot.keyPress(KeyEvent.VK_F8);

これを100ms以内にトリガーする必要があるので、ブロックを検出して迅速に応答するには、好きなロジックを使用してください。あなたが何か速くて汚いものが欲しいなら、私はそれがページがロードされたことを確認するまでの期間、50ms毎にF8キープレスをスパムにするだけです。

編集:さらなる調査の結果、このページは開発ツールを開いている誰にとっても非常に厄介で敵対的です。 debugger;をトリガーする関数は1つではありませんが、ページ上にいる限り、タイマーで繰り返し呼び出されます。セッション全体でF8のスパムを続けたい場合を除いて、ヘッドレスで実行するのが最良の選択のようです。

7
Miltios