这是Driver类
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
class Driver():
def __init__(self):
self.driver = self.driver = \
webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
这是Test01类
import time
import unittest
from EPR_PO.driver.driver import Driver
class Test01(unittest.TestCase,Driver):
def test01(self):
self.driver.get("https://www.baidu.com")
time.sleep(3)
if __name__ == '__main__':
unittest.main()
``
在Test01类中self.driver.后面会自动提示有get,findelement等webDriver对象方法的提示 既然都有提示了,不就说明driver实例化成功了吗报错还显示没有driver这个变量
报错信息:
test01.py::Test01::test01 FAILED [100%]
test01.py:6 (Test01.test01)
self = <test01.Test01 testMethod=test01>
def test01(self):
> self.driver.get("https://www.baidu.com")
E AttributeError: 'Test01' object has no attribute 'driver'
test01.py:9: AttributeError
我记得Python好像不能用多类继承,应该是用组合吧
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import time
import unittest
class Driver():
def __init__(self):
self.driver = None
def setup_driver(self):
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
def teardown_driver(self):
if self.driver:
self.driver.quit()
class Test01(unittest.TestCase):
def setUp(self):
self.driver_manager = Driver()
self.driver_manager.setup_driver()
def tearDown(self):
self.driver_manager.teardown_driver()
def test01(self):
self.driver_manager.driver.get("https://www.baidu.com")
time.sleep(3)
if __name__ == '__main__':
unittest.main()
用setup方法创建Driver实例,然后teardown方法清理,在t1类中使用self.driver_manager.driver访问webdriver对象
【以下回答由 GPT 生成】
这个问题是由于Python中的多类继承引起的。在多类继承中,子类可能无法正确访问父类的属性或方法。解决这个问题的方法是使用super()
函数来调用父类的方法,并确保正确继承父类。
下面是解决这个问题的步骤:
unittest.TestCase
放在前面,Driver
放在后面。这样子类就可以正确继承父类的属性和方法。修改后的代码如下:
class Test01(Driver, unittest.TestCase):
def test01(self):
self.driver.get("https://www.baidu.com")
time.sleep(3)
if __name__ == '__main__':
unittest.main()
super()
函数在子类中调用父类的初始化方法。在子类的__init__
方法中,使用super().__init__()
调用父类的初始化方法。修改后的代码如下:
class Driver():
def __init__(self):
self.driver = None
class Test01(Driver, unittest.TestCase):
def __init__(self):
super().__init__() # 调用父类的初始化方法
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
def test01(self):
self.driver.get("https://www.baidu.com")
time.sleep(3)
if __name__ == '__main__':
unittest.main()
这样就能正确继承父类的driver
属性,并且可以成功访问父类中的WebDriver对象方法了。