2

我需要一些定製的Python的關鍵字(如持有CTRL鍵) 和一切工作開始之前,我重構我的「大」自定義類(但我並沒有真正改變任何東西在這部分左右按住CTRL鍵)。 現在我越來越AttributeError: 'Selenium2Library' object has no attribute 'execute'
我的代碼是:的Python的機器人框架 - Se2Lib有沒有屬性「執行」在我的機器人框架的測試

class CustomSeleniumLibrary(object): 
    def __init__(self): 
     self.driver = None 
     self.library = None 

    def get_webdriver_instance(self): 
     if self.library is None: 
      self.library = BuiltIn().get_library_instance('Selenium2Library') 
     return self.library 

    def get_action_chain(self): 
     if self.driver is None: 
      self.driver = self.get_webdriver_instance() 
      self.ac = ActionChains(self.driver) 
     return self.ac 

    def hold_ctrl(self): 
     self.get_action_chain().key_down(Keys.LEFT_CONTROL) 
     self.get_action_chain().perform() 

,我只是直接撥打電話機器人關鍵詞「按住Ctrl鍵」,那麼,關鍵字文件有我的導入爲庫自定義類(和其他自定義關鍵字工作) ... 任何想法,爲什麼它在「執行」請失敗?

+1

請顯示完整的錯誤。您發佈的代碼顯示不使用任何名爲'execute'的東西。另外,請修復您的縮進。 –

+0

好吧,沒有什麼更多的控制檯...「檢查XY表中所有值的數據... | FAIL | AttributeError:'Selenium2Library'對象沒有屬性'執行'」,是的,「執行」是在我的代碼中沒有任何地方,它甚至不在「執行」或「key_down」之內等等。我真的不知道它是什麼意思...... – neliCZka

回答

3

的問題是在ActionChains,因爲它需要webdriver的實例,而不是Se2Lib實例。 Webdriver實例可以通過調用_current_browser()來獲得。我以這種方式修改了它,它可以工作:

def get_library_instance(self): 
    if self.library is None: 
     self.library = BuiltIn().get_library_instance('Selenium2Library') 
    return self.library 

def get_action_chain(self): 
    if self.ac is None: 
     self.ac = ActionChains(self.get_library_instance()._current_browser()) 
    return self.ac 

def hold_ctrl(self): 
    actionChain = self.get_action_chain() 
    actionChain.key_down(Keys.LEFT_CONTROL) 
    actionChain.perform() 
1

什麼是這樣的:

class CustomSeleniumLibrary(Selenium2Library): 
    def __init__(self): 
     super(CustomSeleniumLibrary, self).__init__() 

    def _parent(self): 
     return super(CustomSeleniumLibrary, self) 

    def hold_ctrl(self): 
     ActionChains(self._current_browser()).send_keys(Keys.LEFT_CONTROL).perform() 
+0

然後,如果您想在您的CustomSeleniumLibrary中使用原始Selenium2Library的頂部創建另一個自定義關鍵字S2L方法,只需調用'self._parent()。s2l_method([args])''。 –

+0

謝謝,但繼承Se2Lib不是一種選擇,因爲我想將這個類分成幾個類,並將它們包含到我的關鍵字中,並使用繼承結果對Se2Lib函數進行模糊調用。 – neliCZka

+0

啊。確實如此。 –