Method()有3个位置参数,但有4个被赋予

时间:2017-05-30 08:22:59

标签: python selenium

早上好,我的一个剧本遇到了问题,这是由我的一位同事做的。

主要的一点是有一个包装器驱动程序,它扩展了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()需要3个位置参数,但是给出了4个

我试过

   sd1.wait_and_move_to(By.XPATH, xpath)

这次说了

  

TypeError:wait_and_get()需要3个位置参数,但是给出了4个

   sd1.wait_and_move_to(xpath)

这导致了

  

TypeError:wait_and_move_to()缺少1个必需的位置参数:'id'

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

这个导致了

  

TypeError:wait_and_move_to()缺少1个必需的位置参数:'id'

任何出现在我心中的东西,但没有任何效果,所以,一些帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:4)

正确的调用是:

sd1.wait_and_move_to(By.XPATH, xpath)

对象sd1隐式传递为第一个参数,并在方法self中变为def 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)
    ...