27

似乎这是在 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 中完成悬停/鼠标悬停?

4

2 回答 2

39
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()
于 2012-06-19T19:57:43.813 回答
1

我认为您正在询问我们需要单击下拉列表菜单项的场景。我们可以使用 Selenium 在 python 中自动化它。

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

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

第一步:导入 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()根据您的工作替换为 selenium 中可用的任何其他 find_elemnt 方法。希望对您有所帮助。

于 2019-02-10T17:19:10.713 回答