2011-12-25 77 views
14

我刮使用硒的webdriver的Python點擊JavaScript彈出通過webdriver的

我的工作網頁上的網頁,有一個表格。我可以填寫表格,然後點擊提交按鈕。

它生成一個彈出窗口(Javascript警報)。我不確定,如何通過webdriver點擊彈出窗口。

任何想法如何做到這一點?

感謝

+0

參見http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_Does_WebDriver_support_Javascript_alerts_and_prompts?這不是Python,但我認爲這是可以理解的。 – rubik 2011-12-25 20:54:32

+0

雅。但它不適用於Python。我一直無法找到一個等價的函數來處理彈出窗口。 – Kiran 2011-12-25 21:18:49

+0

[如何點擊並驗證是否存在彈出窗口(警告)]的可能重複(http://stackoverflow.com/questions/3084850/how-to-click-and-verify-the-existence-of-a -pop-up-alert) – Acorn 2011-12-25 23:53:22

回答

0

取決於處理表單提交 如果沒有這樣的功能,請嘗試使用後

+0

我收到一封簡單的javascript警告,聲明「感謝您提交」,我只想按回車關閉彈出窗口。 – Kiran 2011-12-25 21:19:35

1

提交表單我使用Ruby綁定,但在這裏我在硒的Python中的JavaScript功能綁定2文檔: http://readthedocs.org/docs/selenium-python/en/latest/index.html

Selenium WebDriver內置支持處理彈出對話框。當您已經triggerd和行動,將打開一個彈出窗口,你可以用下面的訪問警報:

alert = driver.switch_to_alert() 

現在,我想你可以做這樣的事情:

if alert.text == 'A value you are looking for' 
    alert.dismiss 
else 
    alert.accept 
end 

希望它能幫助!

19

的Python腳本的webdriver:

from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get("http://sandbox.dev/alert.html") 
alert = browser.switch_to_alert() 
alert.accept() 
browser.close() 

網頁(alert.html):

<html><body> 
    <script>alert("hey");</script> 
</body></html> 

運行腳本的webdriver將打開HTML頁面,顯示一個警告。 Webdriver立即切換到警報並接受警報。 Webdriver然後關閉瀏覽器並結束。

如果你不確定會有警報,那麼你需要用類似的東西來捕捉錯誤。

from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get("http://sandbox.dev/no-alert.html") 

try: 
    alert = browser.switch_to_alert() 
    alert.accept() 
except: 
    print "no alert to accept" 
browser.close() 

如果您需要檢查警報的文字,你可以通過訪問警報對象的文本屬性得到警報的文本:

from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get("http://sandbox.dev/alert.html") 

try: 
    alert = browser.switch_to_alert() 
    print alert.text 
    alert.accept() 
except: 
    print "no alert to accept" 
browser.close() 
+1

switch_to_alert()現已在最新的Selenium Python綁定v 2.46.0中被棄用。改爲使用driver.switch_to.alert。資料來源:http://selenium-python.readthedocs.org/en/latest/api.html – SpartaSixZero 2015-07-01 20:55:40

1

如果你想接受或點擊彈出窗口,不管它是什麼,然後

alert.accept 

哪裏 alertselenium.webdriver.common.alert.Alert(driver)類 和0的對象是該對象的方法

Source

4
from selenium import webdriver 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
#do something 
if EC.alert_is_present: 
    print "Alert Exists" 
    driver.switch_to_alert().accept() 
    print "Alert accepted" 
else: 
    print "No alert exists" 

進一步瞭解excepted_conditions https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html

+0

僅供參考,switch_to_alert()現在已被棄用,並已被替換爲switch_to.alert http:// selenium-python。 readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webdriver.WebDriver.switch_to_alert – demouser123 2015-06-21 07:01:59

+0

@bad_deadpool感謝您的更新!此外:該鏈接是404 - 該文檔現在位於http://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.switch_to_alert – 2017-05-08 22:36:51

+0

感謝@GregSadetsky的更新。 – 2017-05-10 03:04:24