32

Selenium の Python バージョンを使用して、DOM 内の要素をクリックし、クリックしたい座標を指定することはできますか? Java バージョンには methodclickAtがあり、これは実際に私が探していることを正確に実行しますが、Python では同等のものを見つけることができません。

4

4 に答える 4

56

これでできるはずです!つまり、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()。そうでなければ何も起こりません。

于 2014-10-15T14:45:37.670 に答える
7

混乱している理由clickAtは、古い v1 (Selenium RC) メソッドです。

WebDriver の「アクション」という概念は少し異なります。

具体的には、Python バインディングの「Actions」ビルダーがここにあります

このコマンドの考え方は、特定の要素に対してclickAt特定の位置をクリックすることです。

「Actions」ビルダーを使用して、WebDriver 内で同じことを達成できます。

この更新されたドキュメントがお役に立てば幸いです。

于 2013-05-29T08:24:03.780 に答える
2

私は個人的にこの方法を使用したことはありませんが、のソースコードを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 ドキュメントがあります。

于 2013-05-29T07:02:19.913 に答える