web-dev-qa-db-ja.com

SeleniumとPythonバインディングを使用して、マウスオーバー(要素の上にホバー)を実行する方法はありますか?

here と読むと、明らかにRenderedWebElementメソッドを持つhoverクラスがありました。ただし、これはJava(私はPythonバインディングドキュメントを利用できない)で検索しました)専用に作成され、それ以降Javaで非推奨になりました。

hoverは、 action_chains を使用して、または WebElement オブジェクトを使用しても実行できません。

Pythonでこれを行う方法に関するアイデアはありますか? here でしたが、RenderedWebElementを使用しているため、あまり役に立ちません。

私は使用しています:Python 2.7、Windows Vista、Selenium 2、Python Bindings

EDIT:mouse_overオブジェクトにはSelenium.selenium.Seleniumというメソッドがありますが、スタンドアロンサーバーは既に実行されています。

[〜#〜] edit [〜#〜]私のように誤解がある場合に備えて、回答としてマークされた返信のコメントをご覧ください!

41
Ashwin

ホバーを行うには、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()
74
AutomatedTester

@AutomatedTesterはコミュニティに素晴らしいソリューションを提供しました!

以下は私がそれを使用した方法です。

時々現在のプロセスでハングするため、phantomJSを適切に終了するためにシグナルを使用しました。

Xpathはchromeで簡単に見つけることができるので、find_element_by_xpathを使用することを好みます。

方法は次のとおりです。右クリック->検査->右クリック->コピー-> 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()
2
hyukkyulee