在python中关闭Firefox Web驱动程序时出现意外警报

时间:2014-06-16 05:11:27

标签: python firefox selenium selenium-webdriver webdriver

我在python中有一个简单的脚本,用于使用selenium web-driver登录网站。问题是,当我试图关闭网络驱动程序时,FireFox会给我一个意外的警报。这是我的剧本:

from selenium import webdriver
from time import *

class ClassTest(object):
    def __init__(self):
        self.driver = webdriver.Firefox()
        self.driver.get('url')


    def login(self, username, password): 
        self.driver.find_element_by_name("username").clear()
        self.driver.find_element_by_name("username").send_keys(username)
        self.driver.find_element_by_name("password").clear()
        self.driver.find_element_by_name("password").send_keys(password)
        self.driver.find_element_by_name("submit").click()

    def logout():
        self.driver.find_element_by_name('logout').click()        

    def __del__(self):
        self.logout()
        self.driver.close()
        self.driver.quit()

if __name__ == "__main__":
    test = ClassTest()
    test.login('myUsername', 'myPasswd')

我尝试了两种关闭Web驱动程序窗口的方法;首先使用self.driver.close(),然后在self.driver.quit()之后使用self.driver.close()。两者都给了我相同的结果。堆栈跟踪如下:

Message: u'Modal dialog present' ; Stacktrace: 
    at nsCommandProcessor.prototype.execute (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/command_processor.js:10949)
    at Dispatcher.executeAs/< (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:7717)
    at Resource.prototype.handle (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:7864)
    at Dispatcher.prototype.dispatch (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:7811)
    at WebDriverServer/<.handle (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/driver_component.js:10740)
    at <anonymous> (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1935)
    at ServerHandler.prototype.handleResponse (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:2261)
    at Connection.prototype.process (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1168)
    at RequestReader.prototype._handleResponse (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1616)
    at RequestReader.prototype._processBody (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1464)
    at RequestReader.prototype.onInputStreamReady (file:///c:/users/user/appdata/local/temp/tmpeqmito/extensions/fxdriver@googlecode.com/components/httpd.js:1333) 

这是警告:

enter image description here

任何关于原因的想法???

编辑1:

我有一些解决方法,我发现每当我不从网站注销时,都没有警报。也许登出按钮或其背后的过程有问题。它的HTML代码是:

<img src="/images/button/exit.png" class="gwt-Image" name="logout" title="Log Off">

1 个答案:

答案 0 :(得分:1)

我相信在进行AJAX调用时会显示对话框。我通常在Chrome和Firefox中看到它。

一些建议。

注销后进行短暂睡眠。我相信在注销时可能会运行AJAX,使用短暂的睡眠可能会让AJAX运行完成。

import time

self.logout()
time.sleep(5)
self.driver.close()
self.driver.quit()

alert.accept()中包裹try-except

self.logout()
try:
    alert = self.driver.switch_to_alert()
    alert.accept()
    print "alert accepted"
except TimeoutException:
    print "no alert"
self.driver.close()
self.driver.quit()