我在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)
这是警告:
任何关于原因的想法???
编辑1:
我有一些解决方法,我发现每当我不从网站注销时,都没有警报。也许登出按钮或其背后的过程有问题。它的HTML代码是:
<img src="/images/button/exit.png" class="gwt-Image" name="logout" title="Log Off">
答案 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()