Python 如何处理TypeError:\uuuuu call\uuuuu()至少接受2个参数(给定1个)?

Python 如何处理TypeError:\uuuuu call\uuuuu()至少接受2个参数(给定1个)?,python,selenium,testing,selenium-webdriver,automated-tests,Python,Selenium,Testing,Selenium Webdriver,Automated Tests,下一部分是方法: from enum import Enum from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains class KeyMouseOperation(Enum): CONTEXT_CLICK = 1 DOUBLE_CLICK = 2 DRAG_AND_DROP = 3 CLICK_AND

下一部分是方法:

from enum import Enum
from selenium import webdriver
import  time
from selenium.webdriver.common.action_chains import ActionChains

class KeyMouseOperation(Enum):
    CONTEXT_CLICK = 1
    DOUBLE_CLICK = 2
    DRAG_AND_DROP = 3
    CLICK_AND_HOLD = 4

    def keymouse(url, operation_by , elementxpath):
        driver = webdriver.Chrome()
        driver.get(url)
        time.sleep(1)
        driver.maximize_window()
        time.sleep(1)

        if operation_by == KeyMouseOperation.CONTEXT_CLICK:
            result = ActionChains(driver).context_click(driver.find_element_by_xpath(elementxpath)).perform()
        if operation_by == KeyMouseOperation.DOUBLE_CLICK:
            result = ActionChains(driver).double_click(driver.find_element_by_xpath(elementxpath)).perform()
        if operation_by == KeyMouseOperation.DRAG_AND_DROP:
            result = ActionChains(driver).drag_and_drop(driver.find_element_by_xpath(elementxpath), driver.find_element_by_xpath(elementxpath)).perform()
        if operation_by == KeyMouseOperation.CLICK_AND_HOLD:
            result = ActionChains(driver).click_and_hold(driver.find_element_by_xpath(elementxpath)).perform()
        else:
            time.sleep(3)
from method.key_Mouse import *
KM = KeyMouseOperation()
KM.keymouse("https://www.baidu.com", KeyMouseOperation.CONTEXT_CLICK, "//*[@id='kw']")
这是该方法的实例:

from enum import Enum
from selenium import webdriver
import  time
from selenium.webdriver.common.action_chains import ActionChains

class KeyMouseOperation(Enum):
    CONTEXT_CLICK = 1
    DOUBLE_CLICK = 2
    DRAG_AND_DROP = 3
    CLICK_AND_HOLD = 4

    def keymouse(url, operation_by , elementxpath):
        driver = webdriver.Chrome()
        driver.get(url)
        time.sleep(1)
        driver.maximize_window()
        time.sleep(1)

        if operation_by == KeyMouseOperation.CONTEXT_CLICK:
            result = ActionChains(driver).context_click(driver.find_element_by_xpath(elementxpath)).perform()
        if operation_by == KeyMouseOperation.DOUBLE_CLICK:
            result = ActionChains(driver).double_click(driver.find_element_by_xpath(elementxpath)).perform()
        if operation_by == KeyMouseOperation.DRAG_AND_DROP:
            result = ActionChains(driver).drag_and_drop(driver.find_element_by_xpath(elementxpath), driver.find_element_by_xpath(elementxpath)).perform()
        if operation_by == KeyMouseOperation.CLICK_AND_HOLD:
            result = ActionChains(driver).click_and_hold(driver.find_element_by_xpath(elementxpath)).perform()
        else:
            time.sleep(3)
from method.key_Mouse import *
KM = KeyMouseOperation()
KM.keymouse("https://www.baidu.com", KeyMouseOperation.CONTEXT_CLICK, "//*[@id='kw']")
但结果是:

C:\Python27\python.exe C:/Users/chenjia/PycharmProjects/AutomationTestSuite/Case/practice.py
Traceback (most recent call last):
  File "C:/Users/chenjia/PycharmProjects/AutomationTestSuite/Case/practice.py", line 46, in <module>
    KM = KeyMouseOperation()
TypeError: __call__() takes at least 2 arguments (1 given)

Process finished with exit code 1
C:\Python27\python.exe C:/Users/chenjia/PycharmProjects/AutomationTestSuite/Case/practice.py
回溯(最近一次呼叫最后一次):
文件“C:/Users/chenjia/PycharmProjects/AutomationTestSuite/Case/practice.py”,第46行,在
KM=按键鼠标操作()
TypeError:_调用__()至少接受2个参数(给定1个)
进程已完成,退出代码为1

如何处理
TypeError:\uuu call\uuuu()至少接受2个参数(给定1个)

KeyMouseOperation
是一个枚举类,您不必调用它。相反,将
keymouse
设置为类方法:

然后像这样使用它:

KeyMouseOperation.keymouse(
    "https://www.baidu.com", KeyMouseOperation.CONTEXT_CLICK,
    "//*[@id='kw']")
请参阅
enum
文档的

就个人而言,我会将
keymouse
作为值的一种方法,并跟踪在
ActionChains
类上使用的正确方法:

class KeyMouseOperation(Enum):
    # each value is the method (unbound), and how many arguments
    # to pass in.
    CONTEXT_CLICK = (ActionChains.context_click, 1)
    DOUBLE_CLICK = (ActionChains.double_click, 1)
    DRAG_AND_DROP = (ActionChains.drag_and_drop, 2)
    CLICK_AND_HOLD = (ActionChains.click_and_hold, 1)

    def keymouse(self, url, elementxpath):
        driver = webdriver.Chrome()
        driver.get(url)
        time.sleep(1)
        driver.maximize_window()
        time.sleep(1)

        ac = ActionChains(driver)
        action, argcount = self.value
        method = action.__get__(ac)  # bind the action method
        element = driver.find_element_by_xpath(elementxpath)
        return method(*[element] * argcount).perform()
然后将其用作:

KeyMouseOperation.CONTEXT_CLICK("https://www.baidu.com", "//*[@id='kw']")