66

ユーザーを管理するWebページのPython言語でセレンを使用したテストを作成しようとしています。このページでは、誰かがユーザーの役割を追加できます。追加中に役割が存在する場合は、アラートが発生します。アラートが JavaScript アラートなのか、Web ページの要素なのかわかりません。アラートの有無を自動で確認したいのですが、リスト内の役割を確認するのは時間の無駄であり、負荷が非常に大きいためです。私はこれを試しました:

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
try:
    alert = browser.switch_to_alert()
    alert.accept()
    print "alert accepted"
except:
    print "no alert"

しかし、それは機能せず、「UnexpectedAlertPresentException」が発生しました。私もこれを試しました:

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
s = set(browser.window_handles)
s.remove(browser.current_window_handle)
browser.switch_to_window(s.pop()) 

しかし、私は同じ例外を得ました。さらに、プロパティでアクセスできるかどうかを確認するためにfirebugでアラートにアクセスしようとしましたが、右クリックが無効になりました。他の言語であっても、すぐに解決策が必要です。とにかくアプローチが理解できます。どんな助けにも感謝します。

4

5 に答える 5

12

これは遅すぎる答えであり、あなたは何年も前にこの質問を解決しましたが、将来の読者の参考のために私の分析と調査結果を投稿したいと思います。

私は Django Web サイト開発プロジェクトに取り組んでおり、現在、特定の Web ページを開くとエラー メッセージ ボックスが表示されるというバグがあります。私の環境は次のとおりです。

  • ジャンゴ1.8
  • パイソン 2.7
  • セレン 2.46.0

ここで「UnexpectedAlertPresentException」に関するドキュメントを読みましたが、次のように書かれています。

予期しないアラートが表示されたときにスローされます。

通常、予想されるモーダルが Webdriver フォームがそれ以上のコマンドを実行するのをブロックしている場合に発生します。

私は自分のプロジェクトでテストしましたが、私の結果は次のとおりです。

  • アラート ボックスが表示されると、find_element_by_Xメソッドは成功します。
  • click() または send_keys() は「UnexpectedAlertPresentException」で失敗します。

try...catchそのため、の行で「UnexpectedAlertPresentException」がスローされるため、ブロックが機能しないと思います

browser.find_the_element_by_id("add_button").click()

これは、次の行によって Web ページが開かれるとすぐに警告ボックスが表示されることも意味します。

browser.get("url")

つまり、ページを開くとすぐにアラート ボックスが表示される原因となった問題が背後に隠れている可能性があります。最初にその問題を修正する必要があるかもしれません。

別のことは次のとおりです。次の行のにアラートボックスが表示されたと仮定します。

browser.find_the_element_by_id("add_button").click()

次に、alert = browser.switch_to_alert()例外がスローされずにうまく機能するはずです。これは、ここで説明したことと矛盾します。これも、問題はラインにあると思いましたbrowser.get("url")

私の分析では問題が別の場所にあることが示されているため、選択したソリューションが問題の解決にどのように役立ったかはよくわかりません。とにかく、受け入れられた解決策を再選択するよう求めているわけではありません。将来の読者のために私の考えを共有したいだけです。この質問で何かを見落としたり誤解したりして、私の分析が間違っていた場合はお詫び申し上げます(そして、これを読む時間を無駄にします:-)。

于 2015-07-19T18:55:16.593 に答える
2

Javaでは、このようにします

WebDriverWait wait3 = new WebDriverWait(driver, 7000);
wait3.until(ExpectedConditions.alertIsPresent());
driver.switchTo().alert().accept();

アラートが存在しない場合は暗黙的にアラートを待機し、「Alert is not present Exception」をスローします。これをキャッチして先に進むことができます。

それが役に立てば幸い。

于 2013-09-26T05:31:51.067 に答える
0
alert = self.driver.switch_to.alert
    if alert.is_displayed():
        alert.accept()
于 2019-06-21T21:04:37.673 に答える