如何在python Webdriver中鼠标悬停

时间:2012-06-19 00:06:24

标签: python selenium webdriver selenium-webdriver

似乎这是在webdriver中进行悬停/鼠标悬停的方法,至少在java api中是这样的:

Actions action = new Actions(driver);
action.moveToElement(element).build().perform();
action.moveByOffset(1, 1).build().perform();

这在Python api中是否可行? python的webdriver api文档似乎没有提到类似的东西。 http://selenium.googlecode.com/svn/trunk/docs/api/py/index.html

如何在python webdriver中完成hover / mouseover?

2 个答案:

答案 0 :(得分:35)

from selenium.webdriver.common.action_chains import ActionChains


def hover(self):
    wd = webdriver_connection.connection
    element = wd.find_element_by_link_text(self.locator)
    hov = ActionChains(wd).move_to_element(element)
    hov.perform()

答案 1 :(得分:0)

我认为您正在要求我们需要单击下拉列表菜单项的情况。我们可以使用Selenium在python中将其自动化。

为了手动执行此操作,首先我们需要通过将鼠标悬停在父菜单上来调出下拉列表菜单。然后从显示的下拉菜单中单击所需的子菜单。

使用Selenium WebDriver中的ActionChains类,我们可以以与手动操作相同的方式执行此步骤。该方法如下所述-

步骤1:导入webdriver模块和ActionChains类

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

步骤2:打开Firefox浏览器并加载URL。

site_url = 'Your URL'
driver = webdriver.Firefox()
driver.get(site_url)

第3步:通过传递驱动程序对象创建ActionChains对象

action = ActionChains(driver);

步骤4:在页面中找到一级菜单对象,然后使用“ move_to_element()”方法在该对象上移动光标。 方法perform()用于执行我们在操作对象上构建的操作。对所有对象执行相同的操作。

firstLevelMenu = driver.find_element_by_id("first_level_menu_id_in_your_web_page")
action.move_to_element(firstLevelMenu).perform()
secondLevelMenu = driver.find_element_by_id("second_level_menu_id_in_your_web_page")
action.move_to_element(secondLevelMenu).perform()

步骤5:使用click()方法单击所需的菜单项

secondLevelMenu.click()

最后的代码块是这样的:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

site_url = 'Your URL'
driver = webdriver.Firefox()
driver.get(site_url)

action = ActionChains(driver);

firstLevelMenu = driver.find_element_by_id("first_level_menu_id_in_your_web_page")
action.move_to_element(firstLevelMenu).perform()
secondLevelMenu = driver.find_element_by_id("second_level_menu_id_in_your_web_page")
action.move_to_element(secondLevelMenu).perform()

secondLevelMenu.click()

您可以根据自己的工作将driver.find_element_by_id()替换为硒中可用的任何其他find_elemnt方法。希望对您有帮助。