2017-05-30 26 views
0

おはようございます、私は私の同僚の一人が作成したスクリプトの1つに問題がありました。メソッド()は3つの位置引数を取るが、4つは与えられた

主なポイントは、それに我々はmousehoverアクションを容易にするために、いくつかの方法、および他のいくつかの機能を持っている、のpythonのユーザビリティの一部を拡張するラッパードライバを持っていたことに、私たちは

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_move_to() missing 1 required positional argument: 'id'

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

をもたらし、この1つは

の結果

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(By.XPATH, xpath) 

sd1が暗黙のうちに最初の引数として渡されたオブジェクトとあなたがの行番号を見ていた場合、def wait_and_move_to(self, mode, id):

しかしこの方法ではselfを次のようになります。

+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

「私は、私の心の中から出てきたものを(...)試しました。これはあなたが学ぶ方法ではありません。エラーメッセージとコード(とあなたが使っている言語)を分かりやすくすることがより良い戦略です...また、2番目の呼び出しの例( 'sd1.wait_and_move_to(By.XPATH、xpath)')は、あなたが投稿したエラーメッセージと、「何も働いていません」とは、問題の最も無駄な記述です。 –

答えて

3

正しい呼び出しがあります例外として、ここからがスローされていることがわかります:

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

関連する問題