2017-03-12 4 views
0

私はブラウザでアプリケーションを実行しています。いくつかのアクションでは、キーストロークでアクションをシミュレートできました。私は特有の問題を抱えています:私のアプリの中には、システムのプロンプトがポップアップ表示されるものがあります。Selenium-Python:システムモーダルダイアログと対話します

これらをSelenium Pythonで制御する方法はありますか?例として、キーストロークを使用してページを保存することを想像してみましょう。システムダイアログ(Webアプリケーションの一部ではない)が表示され、ファイルの保存場所を尋ねられます。または、複数のタブが開いている場合にブラウザーウィンドウを閉じることが確実かどうかを尋ねるプロンプトを想像してみてください。

ブラウザでウィンドウ間のコンテキストを切り替えることができると仮定して、別のウィンドウを検索しようとしましたが、これらはシステムウィンドウなので、メインアプリケーションの横には何も見つかりませんでした。このための回避策はありますか?

答えて

0

あなたはセレンのメソッドの使用が現在のウィンドウをチェックして、別のものに移動するために作ることができます:あなたは、ウィンドウハンドルのリストを見つけることが

driver.window_handles 

を使用することができます

と試みた後、使用して、次を切り替えます方法(selenium documentation)。

  • driver.switch_to_alert()
  • driver.switch_to.active_element
  • driver.switch_to.default_content
  • driver.switch_to.window

あなたが仕事アプリケーションは、セレンに応答すると思われるので、ここでは、ポップアップウィンドウを開く方法について実施例であるコマンドセレンのスコープを切り替え、データを抽出してポップアップを閉じます。 プロセスは、すべての製品に対して繰り返される:あなたはおよそシステムダイアログを話している場合

for item in driver.find_elements_by_class_name("products"): 
    item.click() # clicking on item activate a popup 
    driver.switch_to_alert() #switch to new window 
    # Get data 
    driver.find_elements_by_css_selector(".ui-dialog-titlebar-close.ui-corner-all")[0].click() #close window 
0

は、それはセレンを使用して彼らと対話することはできません。

はしかし、ブラウザのポップアップ(アラート)のために、ちょうどポップアップに移動します。

driver.switch_to_alert() 

はその後、ポップアップと対話する Alertクラスからメソッドを使用します。 Alertクラスには、アラートプロンプトからの却下、受け入れ、入力、およびテキストの取得のためのメソッドが含まれています。

いくつかの例:

Alert(driver).accept() 
Alert(driver).dismiss() 
Alert(driver).authenticate() 
Alert(driver).send_keys(keys_to_send) 
Alert(driver).text() 

参照:https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.alert.html

関連する問題