运行 Selenium Webdriver Python脚本时,在执行'NoneType' object has no attribute 'path'
后获得self.driver.quit().
在self.driver.quit()
中封闭try/except
不会帮助,即:
$ cat demo_NoneType_attribute_error.py
# -*- coding: utf-8 -*-
from selenium import webdriver
import unittest
class TestPass(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def test_pass(self):
pass
def tearDown(self):
print("doing: self.driver.quit()")
try:
self.driver.quit()
except AttributeError:
pass
if __name__ == "__main__":
unittest.main()
$ python demo_NoneType_attribute_error.py
doing: self.driver.quit()
'NoneType' object has no attribute 'path'
.
----------------------------------------------------------------------
Ran 1 test in 19.807s
OK
$
'NoneType' object has no attribute 'path'
消息?注意:
由于此问题已在11月初报告过(请参阅下面的网址),它现在应该有一个补丁 - 但将selenium
升级到pip
的最新版本并没有消除它。
环境:硒3.0.2; Python 2.7; Windows 7上的Cygwin 32位。
答案 0 :(得分:5)
这似乎是selenium 3.0
版
更新quit()
webdriver.py
中的firefox
方法定义,如下所示(相对路径:..\Python27\Lib\site-packages\selenium\webdriver\firefox\webdriver.py
):
更改quit()
方法中的以下行:
shutil.rmtree(self.profile.path) #which gives Nonetype has no attribute path
if self.profile.tempfolder is not None:
shutil.rmtree(self.profile.tempfolder)
到
if self.profile is not None:
shutil.rmtree(self.profile.path) # if self.profile is not None, then only rmtree method is called for path.
if self.profile.tempfolder is not None:
shutil.rmtree(self.profile.tempfolder) # if tempfolder is not None, then only rmtree is called for tempfolder.
注意:在使用self.profile
的地方,执行相同的操作。即,将代码移动到如上所述的条件。
在Selenium 3.0
中,profile
和binary
移至firefox_options
,而不是firefox_profile
和firefox_binary
分别在Selenium 2.0
}}
您可以在webdriver.py
firefox
方法的__init__
__init__
中验证这一点。
if firefox_options is None:
firefox_options = Options()
print dir(firefox_options) # you can refer binary and profile as part of firefox_options object.
方法中的相关代码:
firefox_options.profile
注意:观察到None
仍在提供selenium 3.0
,这可能是greet(param1 on: param2)