2012-01-22 45 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

相关问题