印刷ダイアログ (ブラウザで ctrl-p をクリックしたときに表示されるものと同じ) を処理する必要があります。私は試しました:
Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();
しかし、うまくいきませんでした。また、ウィンドウではないため、ウィンドウハンドルをキャッチできませんでした...
これらのオブジェクトを処理することは可能ですか?またその方法は?
残念ながら、WebDriver はこれら (または他のブラウザーや OS ダイアログ) を処理できません。さらに、ブラウザ、システム、言語設定によって見え方が異なる傾向があるため、明確な答えはおそらくありません。どこでも機能させるには、考えられるすべてのケースを検出して処理する必要があります。オプションは次のとおりです。
このRobot
クラスを使用すると、プログラムでキーボード上の任意のものを「押す」(または盲目的にクリックする) ことができるため、たとえば、Enterまたはを押すことでダイアログを取り除くことができEscます。ただし、上で説明したように、高度な対話は OS / 言語 / プリンターに依存します。
// press Escape programatically - the print dialog must have focus, obviously
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ESCAPE);
r.keyRelease(KeyEvent.VK_ESCAPE);
AutoIt . これは、システム レベルの自動化を処理するのに役立つ Windows プログラムです。上記と同じ依存関係。
それは多かれ少なかれそれです。印刷ダイアログを回避できる場合は、ページのスクリーンショットを撮り、標準の Java ツールを使用して印刷してみてください。
印刷ダイアログが表示されたら、ブラウザを閉じてください。これは確かにやや抜本的な対策ですが、利点は次のとおりです。
ただ電話してください:
myWebDriver.quit();
通常、テストを実行し、通常どおり印刷するページの要素を確認します。印刷ダイアログが開いていても、WebDriver はページ要素をチェックできます。
完了したら、ブラウザーを終了します (そして、次のテストのために新しいブラウザーを起動します)。
プロジェクトでこれをうまく使用しました。簡単にするために、「現在の WebDriver インスタンス」を追跡するラッパー クラスを作成しました。このインスタンスを取得 (必要に応じて作成) し、それを閉じるメソッドがあります。そうすれば、いつでも呼び出しgetCurrentWebDriver()
て有効なインスタンス (再利用または新たに作成) を取得できます。