关闭Python中的Firefox WebDriver时出现意外警报
我有一个简单的Python脚本,用来通过Selenium这个工具登录一个网站。问题是,当我尝试关闭这个工具的时候,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')
我尝试了两种关闭工具窗口的方法;第一种是直接用 self.driver.close()
,第二种是在 self.driver.close()
后面再用 self.driver.quit()
。这两种方法的结果都是一样的。下面是错误信息的详细内容:
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)
这是弹出的警告框:
有没有人知道这是为什么呢???
补充说明 1:
我找到了一些解决办法,发现每当我没有从网站登出的时候,就不会出现这个警告。可能是登出按钮或者它背后的处理过程出了问题。它的HTML代码是:
<img src="/images/button/exit.png" class="gwt-Image" name="logout" title="Log Off">
1 个回答
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()