2012-01-22 46 views
1

我剛開始使用Selenium 2,所以這將是非常基本的(我希望...)。如何在Selenium 2 python中捕獲彈出窗口

我想在http://contentparadise.com/

我去登錄https://www.contentparadise.com/signin.aspx頁,我能夠進入ID登錄到我的帳戶/密碼,然後提交。但即使使用正確的id/pw,它也會將我返回到登錄頁面 - 在一個小型消息框中添加了「出現以下錯誤」字樣。很顯然,代碼中的id/pw是錯誤的,我試圖將其視爲一個錯誤 - 但是即使使用我的真實id/pw,我也能得到它。

如何檢測和閱讀此消息框,爲什麼沒有正確的設置進入主頁?

我在另一個網站上使用相同的代碼,使用正確的設置,它將我帶到主頁,因爲它應該。

這是使用JavaScript的登錄頁面的情況嗎?如果您查看登錄頁面的來源,請查找字符串「」以啓動表單的該部分。

下面的代碼:

from selenium import webdriver 
import sys 
import os 

userID = "wajahbaru" 
pw = "marmalade" 

wdrv = webdriver.Firefox() 
wdrv.get("https://www.contentparadise.com/signin.aspx") 

print "Page #1 title is: " + wdrv.title; # should be "Sign In" 

unamefield = wdrv.find_element_by_name("ctl00$ContentPlaceHolder1$txtUserName").send_keys(userID) 
pwdfield = wdrv.find_element_by_name("ctl00$ContentPlaceHolder1$txtPassword").send_keys(pw) 
pwdfield = wdrv.find_element_by_name("ctl00$ContentPlaceHolder1$btnLogin").click() 

print "Page #2 title is: " + wdrv.title; # if logged in this should be "Content Paradise: Buy or Sell Software, 2D Content, 3D Models and Audio." 

wdrv.get_screenshot_as_file("test.jpg") 
wdrv.quit() 

回答

1

如何檢測並讀取此消息框,爲什麼不正確設置轉到主頁?

要檢測錯誤消息框,你可以用id="error"搜索元素:

#!/usr/bin/env python 
from contextlib import closing 
from selenium.webdriver import Firefox as Browser 
from selenium.webdriver.support.ui import WebDriverWait 

timeout = 10 # seconds 

with closing(Browser()) as browser: 
    browser.get('https://www.contentparadise.com/signin.aspx') 
    assert browser.title == "Sign In" 
    login, password, submit = map(browser.find_element_by_id, 
     ['ctl00_ContentPlaceHolder1_txtUserName', 
     'ctl00_ContentPlaceHolder1_txtPassword', 
     'ctl00_ContentPlaceHolder1_btnLogin']) 
    enter_text = lambda x, text: (x.clear(), x.send_keys(text)) 
    enter_text(login, "abc") 
    enter_text(password, "pas$W0rd") 
    submit.click() 

    # wait for error or success 
    value = WebDriverWait(browser, timeout).until(
     lambda x: ("Content Paradise" in x.title and "ok" or 
        x.find_element_by_id('error'))) 
    if value != "ok": 
     print "error:", value.text 
    browser.get_screenshot_as_file('test.jpg') 
+0

好的,它顯示了警報的文本 - 謝謝。順便說一句,我沒有收到電子郵件通知有一個答案... – Stephen

相關問題