Python 多类继承出错

这是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()函数来调用父类的方法,并确保正确继承父类。

下面是解决这个问题的步骤:

  1. 将Test01类的多继承中的顺序调整一下,把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()
  1. 使用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对象方法了。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^