使用Python向Selenium WebDriver WebElements添加函数

使用Selenium WebDriver测试网站时,我希望能够双击WebElement对象,而不必使用类继承或乱用ActionChains . 理想情况下,它应该可以在webelement.double_click()表单中访问,就像click()一样 . 这可以通过编辑WebElement.py文件并将以下内容添加到WebElement类来完成:

def double_click(self):
    self._execute(Command.DOUBLE_CLICK)

很简单 . 但是,我一直在更新这个库,这可能会被覆盖 . 考虑到这一点,我正在尝试找出一种从我正在使用的文件中将此功能添加到WebElement对象的简单方法 . 我尝试导入WebElement并定义函数,如下所示:

from selenium import webdriver
from selenium.webdriver.remote.command import Command
from selenium.webdriver.remote.webelement import WebElement

def double_click(self):
    self.execute(Command.DOUBLE_CLICK)

WebElement.double_click = double_click

然后当我运行浏览器(webdriver.Firefox())时,为每个元素定义了double_click,但它无法正常运行 . 相反,它提出了

WebDriverException: Message: [JavaScript Error: "Argument to isShown must be of type Element" ...

当我以相同的方式重新定义click()函数时,会发生同样的错误 . 我确认我试图点击的元素是类'selenium.webdriver.remote.webelement.WebElement',但似乎电线越过某处,我不知道如何 .

要清楚,我知道有解决方法 . 问题不在于我不能双击 - 我只想知道这是否可能以类似于我正在尝试的方式进行 .

回答(1)

3 years ago

要修补 WebElement 类上的双击方法:

def WebElement_double_click(self):
    self._parent.execute(Command.MOVE_TO, {'element': self._id})
    self._parent.execute(Command.DOUBLE_CLICK)
    return self

WebElement.double_click = WebElement_double_click