Есть ли способ выполнить наведение мыши (навести курсор на элемент), используя привязки Selenium и Python?

Читая здесь, по-видимому, когда-то существовал класс RenderedWebElement с методом hover. Однако он был предназначен исключительно для Java (искал документацию по привязкам python здесь безрезультатно) и с тех пор считается устаревшим для Java.

Наведение не может быть выполнено ни с помощью action_chains ( список методов), ни с помощью объекта webelement ( список методов).

Любые идеи относительно того, как сделать это для Python? Был здесь, но он использует RenderedWebElement и, следовательно, не слишком помогает.

Python 2.7, Windows Vista, Selenium 2, привязки Python

РЕДАКТИРОВАТЬ: Существует метод "mouse_over" для объекта selenium.selenium.selenium, но я не могу найти способ создать экземпляр без уже запущенного автономного сервера.

Ответ на вопрос: Пожалуйста, просмотрите комментарии к ответу, помеченному как ответ, только в случае, если у вас есть неправильные представления, как я!

2 ответа

Решение

Чтобы сделать парение, вам нужно использовать move_to_element метод.

Вот пример

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

firefox = webdriver.Firefox()
firefox.get('http://foo.bar')
element_to_hover_over = firefox.find_element_by_id("baz")

hover = ActionChains(firefox).move_to_element(element_to_hover_over)
hover.perform()

@AutomatedTester предоставил сообществу отличное решение!

Ниже как я это использовал.

Я использовал сигнал для правильного выхода из phantomJS, поскольку он иногда зависает в текущем процессе.

Я предпочитаю использовать find_element_by_xpath, поскольку xpath легко найти в chrome.

Вот как это делается: щелкните правой кнопкой мыши -> осмотрите -> щелкните правой кнопкой мыши -> Копировать -> CopyXpath

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

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)

def hover(browser, xpath):
    element_to_hover_over = browser.find_element_by_xpath(xpath)
    hover = ActionChains(browser).move_to_element(element_to_hover_over)
    hover.perform()



browser.service.process.send_signal(signal.SIGTERM)  # kill the specific phantomjs child proc
browser.quit()

Я сделал sub-class из ActionChains упростить код.

class Hover(ActionChains):

    def hover(browser, element):
        return ActionChains(browser).move_to_element(element).perform()

Тогда это можно использовать так:

self.browser = driver
contact_link = self.browser.find_element_by_link_text(
        'Contact')

Hover.hover(self.browser, contact_link)
Другие вопросы по тегам