使用Python覆盖selenium中的webElement的.click()方法

时间:2016-04-27 07:20:00

标签: python python-2.7 selenium selenium-webdriver

我想覆盖selenium.webdriver.remote.webelement.WebElement的 .click()方法。此外,我希望每当我执行点击操作时隐式调用click()方法,例如,

elem = driver.find_element_by_xpath('//some_xpath')
elem.click()

无论如何要实现这个目标吗?

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:5)

要覆盖点击方法:

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


# monkey patch the click method :

def WebElement_click(self):
    """Clicks the element."""
    print("my click")
    self._execute(Command.CLICK_ELEMENT)

WebElement.click = WebElement_click


# usage example :

driver = webdriver.Chrome()
driver.get('https://stackoverflow.com')
driver.find_element_by_id("nav-questions").click()

答案 1 :(得分:3)

我认为实际上覆盖click()方法可能会很棘手并导致不必要的行为。尽管使用EventFiringWebDriver,您或许可以实现自己的目标。请参阅以下示例

from selenium import webdriver
from selenium.webdriver.support.events import EventFiringWebDriver, AbstractEventListener

# My custom event listener
class MyListener(AbstractEventListener):

    def before_click(self, element, driver):
        print "Event : before element click()"

    def after_click(self, element, driver):
        print "Event : after element click()"


# Get an event-firing-web-driver instance
driver = EventFiringWebDriver(webdriver.Firefox(), MyListener())

# Visit a site
driver.get("http://www.google.co.in/")

# Find an element
elem = driver.find_element_by_name("q")

# Click on element
elem.click()

# Close browser
driver.close()

以上输出的脚本,

Event : before element click()
Event : after element click()