使用Python向Selenium WebDriver WebElements添加函数

时间:2016-07-28 21:37:02

标签: python selenium webdriver

使用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()函数时,会发生同样的错误。我确认我试图点击的元素是class&#39; selenium.webdriver.remote.webelement.WebElement&#39;,但似乎电线越过某处,我不确定如何。< / p>

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

1 个答案:

答案 0 :(得分:0)

要修补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