2016-06-16 23 views
-1

問題:ダウンロードするファイルを含むURlにリダイレクトすると、セレニウムスクリプトが認識せず、ダイアログボックスを閉じることができません。添付された画像は、私が参照しているダイアログを示しています。FirefoxでSeleniumとC#を使用してダイアログを検索して閉じる#

私はこれが100万回も尋ねられていることを知っています。私は少なくとも24時間研究し、ウェブ上に掲載された他の提案を試みていますが、成功しませんでした。添付された画像が私が参照しているFirefoxのダイアログボックスを明確にすることを期待しています。

私はIAlerts(アラート要素が見つからない)
2のXPathで要素を見つけようとしてによる検索(取り消すために、XPathが見つかりませんでした)
3. WindowsHandlerメソッドの作成次のソリューション
1を試してみました

(窓の名前を知ることができませんでした)

これについての助けがあれば幸いです。前もって感謝します!

FireFox Dialog

+0

このダイアログを操作するには、 'sendKeys'を使う必要があります。ウィンドウハンドルで切り替える必要があります(名前は必要ありません。ダイアログが表示される前に既存のハンドルを記録し、その後に新しいハンドルが追加されたことを確認するだけです)。ここのオプションの束を参照してください:http://stackoverflow.com/questions/11256732/how-to-handle-windows-file-upload-using-selenium-webdriver –

+0

コメントありがとうございました。あなたが共有したリンクのすべての例を見てきましたが、まだそのウィンドウを認識できませんでした。ハンドルをループすると、ダイアログボックスが認識されません。ウィンドウハンドルのリストは最初のウィンドウしか保持していないので、SendKeysメソッドを使用するためにそれをWeb要素に割り当てる方法はありません。他の考え? –

答えて

0

"ポップアップ" のいくつかの種類があります。

  1. Javascriptダイアログ - これらはHTMLダイアログではなく、JavaScriptで作成されたダイアログです。これらは、alert(),confirm()、およびprompt()からなり、Alertで処理できます。
  2. HTMLダイアログ - これらは、フォーマット方法によってさまざまな形式があります。ダイアログを右クリックし、ブラウザの一般的なコンテキストメニューを表示すると、HTMLダイアログになります。これらは現在のページのDOMの一部です.Seleniumを使用して他のページと同じようにアクセスすることができます(たとえば、ウィンドウハンドルは不要です)。
  3. ブラウザウィンドウ - これらは実際にはポップアップ表示される別のブラウザウィンドウで、どのように書式設定されているかに応じてダイアログのように見えます。これは、現在のブラウザページフレームの外に移動できるので、HTMLダイアログとは異なります。ブラウザの別のタブと同様に、ウィンドウハンドルを使用してこれらのウィンドウにアクセスする必要があります。ウィンドウハンドルを取得すると、他のページと同じようにページのHTMLにアクセスできます。
  4. ブラウザダイアログ - これらはさまざまな形式をとりますが、システムダイアログに似ています。彼らはHTMLで構成されていないので、Seleniumはアクセスできません。それらにアクセスするためのライブラリを使用する以外に、あなたは何を描いていること(4)ブラウザのダイアログであるなど<SPACE><TAB><ENTER>

としてキーを送信することにより、限られた方法でそれらと対話することができます。アクションを実行するブラウザーによって異なるフォームが必要です。あなたの最善の行動はおそらく鍵を送ることでしょう。ブラウザによっては、ダイアログが表示されないようにファイルを特定の場所に自動ダウンロードするように設定することもできます。私はこれを使用したことがないので、私はそこにあなたを導くことはできません。

0

ダイアログが表示された後に開いているウィンドウの量を確認することで、ダウンロードダイアログボックスを見つけて閉じることができました。このソリューションは私のために働いた。

ダイアログを開いて、それをクリックするためのリンクを探す:

var link = MyBrowser.Driver.FindElement(OpenQA.Selenium.By.Id("Button")); 

    IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
    js.ExecuteScript("arguments[0].click();", link); 

は、ダイアログが開いた後、新しいウィンドウ数を取得します。

var newWindowCount = MyBrowser.Driver.WindowHandles.Count; 

スイッチを新たにオープンしたダイアログに、それを閉じます。

MyBrowser.Driver.SwitchTo().Window(MyBrowser.Driver.WindowHandles[newWindowCount-1]); 

    MyBrowser.Driver.Close(); 
+0

ようこそスタックオーバーフロー!このコードは質問者の問題を解決するかもしれませんが、それがどのように機能するのかを説明することが望ましいでしょう - 回答を編集することによって行うことができます。 – dorukayhan

関連する問題