35

印刷ダイアログ (ブラウザで ctrl-p をクリックしたときに表示されるものと同じ) を処理する必要があります。私は試しました:

Alert printDialog = driver.switchTo().alert();
printDialog.dismiss();

しかし、うまくいきませんでした。また、ウィンドウではないため、ウィンドウハンドルをキャッチできませんでした...

これらのオブジェクトを処理することは可能ですか?またその方法は?

4

8 に答える 8

28

残念ながら、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 ツールを使用して印刷してみてください。

于 2012-07-18T11:03:43.520 に答える
2

印刷ダイアログが表示されたら、ブラウザを閉じてください。これは確かにやや抜本的な対策ですが、利点は次のとおりです。

  • 簡単です
  • 外部ツールは必要ありません
  • OS とブラウザ間で動作します

ただ電話してください:

myWebDriver.quit();

通常、テストを実行し、通常どおり印刷するページの要素を確認します。印刷ダイアログが開いていても、WebDriver はページ要素をチェックできます。

完了したら、ブラウザーを終了します (そして、次のテストのために新しいブラウザーを起動します)。


プロジェクトでこれをうまく使用しました。簡単にするために、「現在の WebDriver インスタンス」を追跡するラッパー クラスを作成しました。このインスタンスを取得 (必要に応じて作成) し、それを閉じるメソッドがあります。そうすれば、いつでも呼び出しgetCurrentWebDriver()て有効なインスタンス (再利用または新たに作成) を取得できます。

于 2015-08-24T15:55:09.743 に答える