2012-06-04 46 views
11

私はPython/JSで新しく、またSelenium/WebDriverによる自動テストも行っています。Selenium/WebDriverスクリプトがアラート例外で中断されました "メッセージ:u'Modalダイアログが表示されました"

今私は一点で立ち往生していて、本当にイライラしています。

私がテストしているウェブサイトは、製品を販売しています。私は私のスクリプトをランダムに移動し、支払いページに取得するには、ダミーデータで埋め、使用して、データを提出させるために管理:

通常
browser.execute_script("document.Form.submit(); return true;") 
browser.execute_script("processPayment(); return true;") 

は、有料になりましたボタンがあり、同じ例外で、その要素の結果をクリックすると、 WebDriver(WebElementはありません)を介してOK/Cancelをクリックする方法はありませんでしたが、このJSコードを実行すると、それを回避できます。私の新たに読み込まれたページ(データを送信して投稿を確認した後)に、確認とすべての正しいデータがロードされますが、Pythonスクリプトが中断され、テストを続行できません。

回避策はありますか?

は、使用してみました私はそれがやりたいことなど、そのモーダルダイアログを無視ロードし、要素の場所を継続するために次の確認ページを待つ、それらの値を印刷し、それらを格納することです:

wait = ui.WebDriverWait(browser,10) 
wait.until(lambda browser: browser.title.lower().startswith('Your Receipt')) 
print(browser.title) 

をが、スクリプトは中断されます。申し訳ありませんが、これは答えられているが、私はそれを見つけることができませんでしたまた、私は初心者です!

ありがとうございます!

編集:

それでした!私の場合、うまくいきました。自分のコードを少し修正しました。

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

警告をインポートする必要がある初心者のための注意。

from selenium.webdriver.common.alert import Alert 

答えて

8

アラートをインポートする必要がある初心者(私のような)には注意してください。

from selenium.webdriver.common.alert import Alert 

... ... ... (code placeholder) 

browser.execute_script("document.roomBookingForm.submit(); return true;") 
alert = browser.switch_to_alert() 
alert.dismiss() 
browser.execute_script("processPayment(); return true;") 

はちょうど

+1

alert.dismiss()メソッドは、私のために働いたのアラートハンドラを追加しました。 Thanks Tihomir S. –

+2

もちろんalert.dismiss()は "キャンセル"ボタンを押します。 alert.accept()を使って "OK"を押してください。 –

+1

であり、答えのブラウザは 'webdriver'のインスタンスです。 – Sinux

関連する問題