Selenium の Python バージョンを使用して、DOM 内の要素をクリックし、クリックしたい座標を指定することはできますか? Java バージョンには methodclickAt
があり、これは実際に私が探していることを正確に実行しますが、Python では同等のものを見つけることができません。
4 に答える
これでできるはずです!つまり、webdriver からのアクション チェーンを使用する必要があります。そのインスタンスを取得したら、一連のアクションを登録し、perform()
それらを実行するために呼び出すだけです。
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.google.com")
el=driver.find_elements_by_xpath("//button[contains(string(), 'Lucky')]")[0]
action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(el, 5, 5)
action.click()
action.perform()
これにより、マウスがボタンI feel luckyの左上隅から 5 ピクセル下に、5 ピクセル右に移動します。その後、それはなりclick()
ます。
を使用する必要があることに注意してくださいperform()
。そうでなければ何も起こりません。
混乱している理由clickAt
は、古い v1 (Selenium RC) メソッドです。
WebDriver の「アクション」という概念は少し異なります。
具体的には、Python バインディングの「Actions」ビルダーがここにあります。
このコマンドの考え方は、特定の要素に対してclickAt
特定の位置をクリックすることです。
「Actions」ビルダーを使用して、WebDriver 内で同じことを達成できます。
この更新されたドキュメントがお役に立てば幸いです。
私は個人的にこの方法を使用したことはありませんが、のソースコードをselenium.py
調べると、次の方法が見つかりましたclickAt
。
def click_at(self,locator,coordString):
"""
Clicks on a link, button, checkbox or radio button. If the click action
causes a new page to load (like a link usually does), call
waitForPageToLoad.
'locator' is an element locator
'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse event relative to the element returned by the locator.
"""
self.do_command("clickAt", [locator,coordString,])
def double_click_at(self,locator,coordString):
"""
Doubleclicks on a link, button, checkbox or radio button. If the action
causes a new page to load (like a link usually does), call
waitForPageToLoad.
'locator' is an element locator
'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse event relative to the element returned by the locator.
"""
self.do_command("doubleClickAt", [locator,coordString,])
それらは selenium オブジェクトに表示されます。ここにオンライン API ドキュメントがあります。