Python,selenium webdriver - 我需要基类方法来返回其子类的类型。如何实现?

标签 python class inheritance selenium-webdriver pageobjects

我对 Python(和 stackoverflow)还很陌生,我需要一些帮助。我有如下 2 门类(class)

class baseClass(object):    
    def __init__(self):
        self.attribute = None        
    def baseMethod(self):
        return 'xxx' + str(self.attribute)    
class classA(baseClass):
    field = "test"    
    def __init__(self):
        self.attribute = "attribute value"

我想做如下的事情:

objectA = classA()
afterBaseMethod = objectA.baseMethod()
afterBaseMethod.field

但是我收到错误消息 AttributeError:“str”对象没有属性“field”

事实上,我希望 baseMethod() 返回类型 objectA (所以我的子类类型)。 我如何更改我的类定义来实现这一目标?


对不起,大家,我不够精确我想做的事情。事实上,我想在 python 中实现页面对象以进行 webdriver 测试。我的代码如下。

from selenium import webdriver

########## classes definitions
class BasePageObject:

    def __init__(self, driver):
        self.locator = None
        self.driver = driver
    def getByLocator(self):
        return self.driver.find_element_by_css_selector(self.locator)

class MainPage(BasePageObject):
    def __init__(self, driver):
        self.driver = driver 
    def getHeader(self):
        # I expect here to receive HeaderPageObject, not WebElement (as returned by getByLocator())
        return HeaderPageObject(self.driver).getByLocator() 

class HeaderPageObject(BasePageObject):
    def __init__(self, driver):
        self.driver = driver
        self.locator = '#header'

    def doSomethingWithHeader(self):
        pass
###########################
driver = webdriver.Firefox()
driver.get("https://www.linkedin.com")
mainPage = MainPage(driver)
header = mainPage.getHeader()
header.doSomethingWithHeader()

当我运行它时,我得到了 header.doSomethingWithHeader() AttributeError:“WebElement”对象没有属性“doSomethingWithHeader”

最佳答案

您发布的代码只是定义了两个类,这意味着您甚至没有告诉我们这个报告的错误发生在哪里或者您做了什么来引发它。但 Python 的类机制可以很好地胜任这项任务。

对象知道它们是什么类型,因此即使方法是从父类(super class)继承的,它也会在子类实例上运行( self 将是子类的实例)。下面是一些要演示的代码 - 两个类,每个类都使用基类来报告其类型:

class baseClass(object):    
    def baseMethod(self):
        return type(self)    

class classA(baseClass):
    pass

b = baseClass()
print b.baseMethod()

a = classA()
print a.baseMethod()

输出

<class '__main__.baseClass'>
<class '__main__.classA'>

您可以看到 classA 对象正确打印出其类型,因此它知道进行调用的对象类型。我希望这能告诉您需要了解的内容。

关于Python,selenium webdriver - 我需要基类方法来返回其子类的类型。如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120589/

相关文章:

class - 单击时如何更改特定(此)按钮类。使用 Vue.js 2.0

c++ - 使用QT时未定义对构造函数的引用

c# - C# 中创建 "case classes"的最佳实践/习语

python - Python函数的参数长度?

python - 检查列标题是否与 PYTHON 匹配

python - .m4a 文件的频谱图

c++ - 我什么时候可以安全地从 C++ 中的基类继承

python - 使用 python 绘制值图表

javascript - 如何在 typescript 中键入一个动态加载其自己的成员的类

Python 类继承 AttributeError - 为什么?怎么修?