2017-05-30 143 views
0

早上好,我的一個腳本出了問題,這是我的一位同事做的。方法()需要3個位置參數,但有4個被給出

主要的一點是要具有延伸一些Python的可用性的封裝驅動,在這我們有一些方法,使mousehover動作更容易,還有一些其他功能,在裏面,我們有一些像

Class SuperDriver: 
    def __init__(self, driver: object) -> object: 
     self._driver = driver 

    def wait_and_get(self, mode, key): 
     return WebDriverWait(self._driver, self.WAIT_TIMEOUT).until(EC.visibility_of_element_located((mode, key))) 

    def wait_and_move_to(self, mode, id): 
     elem = self.wait_and_get(self._driver, mode, id) 
     ActionChains(self._driver).move_to_element(elem).perform() 

當我嘗試在另一個腳本我去

from utils.super_driver.SuperDriver import SuperDriver 

Class class1: 
     def class1_test(self): 

      sd1 = Superdriver(driver) 

      sd1.wait_and_move_to(driver, By.XPATH, xpath) 

使用它,然後它說

TypeError: wait_and_move_to() takes 3 positional arguments but 4 were given

我已經與

sd1.wait_and_move_to(By.XPATH, xpath) 

試過這個時候說

TypeError: wait_and_get() takes 3 positional arguments but 4 were given

sd1.wait_and_move_to(xpath) 

這導致

TypeError: wait_and_move_to() missing 1 required positional argument: 'id'

sd1.wait_and_move_to(self, By.XPATH, xpath) 

而這一次導致

TypeError: wait_and_move_to() missing 1 required positional argument: 'id'

任何出於我的想法,但沒有任何工作,所以,一些幫助將不勝感激。

謝謝!

+0

@Andersson怎麼樣去思考而不是意外編程呢? –

+0

'wait_and_move_to()'帶有一個隱含的'self'和2個參數,所以你的第一個例子是正確的。然而,在'wait_and_move_to()'中調用'self.wait_and_get(self._driver,mode,id)'有一個額外的參數,只需要'self.wait_and_get(mode,id)'。 – AChampion

+0

「我試過(......)任何出於我的想法」:這不是你將要學習的方式。試圖理解錯誤信息和代碼(以及你正在使用的語言)是更好的策略......另外,第二個調用示例('sd1.wait_and_move_to(By.XPATH,xpath)')不能導致你發佈的錯誤消息,「沒有任何工作」是對問題最無用的描述。 –

回答

3

正確的調用是:

sd1.wait_and_move_to(By.XPATH, xpath) 

sd1被作爲第一個參數隱式傳遞的對象和方法成爲selfdef wait_and_move_to(self, mode, id):

但是,如果你看的行號例外情況您會看到TypeError正從此處拋出:

def wait_and_move_to(self, mode, id): 
    elem = self.wait_and_get(self._driver, mode, id) 
          ^^^^^^^^^^^^ 

正確的電話號碼是:

def wait_and_move_to(self, mode, id): 
    elem = self.wait_and_get(mode, id) 
    ... 
+0

它的工作!謝啦! –

+1

不客氣。請花點時間瞭解正在發生的事情,猜測解決方案將不會長期有效。 – AChampion

相關問題