2011-07-12 10 views
4

ボタンをクリックするとPDFフォームのポップアップが生成されるページをテストしようとしています。 セレンがポップアップをクリックし、画面のスクリーンショットを撮るか、pdfを保存したいですか?SeleniumのPDFポップアップとのやり取り

次のコードを使用して、すべてのウィンドウハンドルにswitchTo()コマンドを使用させますが、実行すると1つのウィンドウしか返されません。 Seleniumはpdfポップアップを認識していないようです。

Set<String> handles = driver.getWindowHandles(); 
//converts set to array 
String[] array = handles.toArray(new String[0]); 

System.out.println(Arrays.asList(array)); 

別の方法は、pdfポップアップに切り替えることですか?

+0

私はあなたの下のスタートを与えました。しかし、私は100%あなたに答えるための十分な情報を持っておらず、あなたが寛大でない限り、私の答えは「答え」と記されています。 (1)PDFがオブジェクト/ iFrame内で起動されたそのページにストリーミングされたオブジェクト厳密(またはiFrame移行)タグ内のHTTPハンドラ(ファイル自体として)または(2) PDFViewer.aspx OR(3)のように、PDFViewer.aspxのような独自のページで起動されていますか?そうすれば、ここでの課題に対する解決策に大きな違いが生まれます。 – MacGyver

+0

あなたは、PDFがブラウザのPDFプラグインではなくAdobeアプリケーションで開かれると言っていますか?もしそうなら、2番目のブラウザウィンドウでPDFを開くようにMIMEタイプを調整するだけで、WebDriverウィンドウハンドルメソッドを使って両方のウィンドウとスクリーンショットを追跡できます(恐らくSikuliを使用していますか?)。 – djangofan

答えて

2

SeleniumはDOMが制御できるもの(IDEはJavaScriptを実行している)のみを制御できるため、スクリーンショットをとることはできません。あなたの唯一の選択肢は、新しいHTML5用のJavaScriptがオペレーティングシステム上のものを起動するのに強力でない限り(私は知らない)、それを保存することです。私はあなたがJavaScriptを使ってGoogleにPDFを保存するコードを見つけさせるでしょうが、この情報はあなたに役立つはずです。 Selenium.prototype.doLaunchAndSavePDFというカスタムコマンドを作成するだけで、PDFを起動して保存することができます。 "target"パラメータにファイルのパスと名前を指定します。私はSeleniumがJavaScriptに前方(または後方)スラッシュをどのように渡すかは分かりませんので注意してください。がんばろう!

オプション#1 - 使用してセレンIDE場合:

セレンIDE>オプション(メニュー)>オプション(メニューオプション)> [全般]タブの下で、ユーザーextensions.jsファイルを指定して、あなたのファイルを参照「Selenium Core Extensions」の下にあります。

オプション#2 - Selenium RCサーバを使用している場合:

IDEを使用して(例えばJUnitのような)クライアントドライバとSelenium RCサーバを使用していない場合は、のパスを指定する必要がありますコマンドラインでSelenium RCサーバーを起動するときに、* .jsファイルに-userExtensionsパラメーターを指定します。しかし、あなたはただIDEを使いたいと言っていたので、私はこれを無視します。 Selenium RCサーバーを使用するには、かなりの設定が必要です。

のjava -jarセレン-server.jar -userExtensionsユーザーextensions.js

=======================

カスタムuser-extensions.jsファイルで次のカスタムコマンド(JavaScript関数)を作成しました。IDEを見つけ出す前にIDEを終了して再起動しなければなりませんでした。 IDEの "コマンド"フィールドに "do"の後ろにすべてを入力して、カスタムコマンドを探します。それはまた、 "customAlertAndWait"もIDEに追加されたようです。ユーザextensions.jsファイルの

コード:

Selenium.prototype.doCustomAlert =関数(sTarget、sValue){アラート( 'ターゲット:' + sTarget + '...値:' + sValue ); };

セレンIDEコマンドの詳細:

コマンド:customAlert
ターゲット:カスタムアラートのターゲット
値:カスタムアラートの値

関連する問題