我想覆盖selenium.webdriver.remote.webelement.WebElement的 .click()方法。此外,我希望每当我执行点击操作时隐式调用click()方法,例如,
elem = driver.find_element_by_xpath('//some_xpath')
elem.click()
无论如何要实现这个目标吗?
非常感谢任何帮助,谢谢。
答案 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()