Method()接受3个位置参数,但给出了4个

Dav*_*hez 1 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()
Run Code Online (Sandbox Code Playgroud)

当我尝试在另一个脚本中使用它时

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)
Run Code Online (Sandbox Code Playgroud)

然后说

TypeError:wait_and_move_to()接受3个位置参数,但给出了4个

我尝试过

   sd1.wait_and_move_to(By.XPATH, xpath)
Run Code Online (Sandbox Code Playgroud)

这次说

TypeError:wait_and_get()接受3个位置参数,但给出了4个

   sd1.wait_and_move_to(xpath)
Run Code Online (Sandbox Code Playgroud)

这导致

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

   sd1.wait_and_move_to(self, By.XPATH, xpath)
Run Code Online (Sandbox Code Playgroud)

这导致了

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

我想到的所有内容,但无济于事,因此,感谢您的帮助。

谢谢!

ACh*_*ion 5

正确的调用是:

sd1.wait_and_move_to(By.XPATH, xpath)
Run Code Online (Sandbox Code Playgroud)

该对象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)
                             ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

正确的呼叫是:

def wait_and_move_to(self, mode, id):
    elem = self.wait_and_get(mode, id)
    ...
Run Code Online (Sandbox Code Playgroud)

  • 不客气。请花一些时间来了解正在发生的事情,猜测解决方案从长远来看不会有成效。 (2认同)