簡體   English   中英

Python,selenium webdriver - 我需要基類方法來返回其子類的類型。 如何實現?

[英]Python, selenium webdriver - I need base class method to return type of its child class. How to achieve it?

我對 Python(和 stackoverflow)很陌生,我需要一些幫助。 我有 2 個課程如下

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' object has no attribute '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' object has no attribute 'doSomethingWithHeader'

您發布的代碼只是定義了這兩個類,這意味着您甚至沒有告訴我們這個報告的錯誤發生在哪里,或者您做了什么導致它發生。 但是 Python 的類機制可以很好地完成這項任務。

對象知道它們是什么類型,因此即使從超類繼承方法,它也會在子類實例上運行(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對象正確打印出其類型,因此它知道進行調用的對象類型。 我希望這能告訴你你需要知道的。

如果您希望它返回調用它的類,您可以執行以下操作:

def baseMethod(self):
    return self.__class__()

但是,從您的帖子中並不清楚您還希望它做什么。 您的帖子只是顯示它返回一個字符串,該字符串對於您的類的每個實例都相同。 不清楚baseMethod的目的是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM