2013-05-29 6 views
11

Используя версию Selenium на Python, можно ли щелкнуть какой-либо элемент в DOM и указать координаты, куда вы хотите нажать? Версия Java имеет метод clickAt, который фактически выполняет именно то, что я ищу, но не могу найти эквивалент в Python.Selenium - щелкните в определенном месте

ответ

1

Я лично не использовал этот метод, но, глядя через исходный код 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, и вот их online API documentation.

+0

Отличный !! К какому классу они принадлежат? – davids

+0

Они находятся в объекте селена. Я на самом деле только что нашел их документацию по API онлайн - обновить ответ. – Ewan

+0

Просто еще один вопрос. Как вы на самом деле используете это? Я привык работать с объектами webdrivers, но никогда не использовал этот – davids

4

Причина, по которой вы запутываетесь, это clickAt - это старый метод V1 (Selenium RC).

WebDriver имеет несколько другую концепцию, 'Actions'.

В частности, строитель «Действия» для привязок Python живет here.

Идея команды clickAt состоит в том, чтобы щелкнуть в определенном положении Относительно к определенному элементу.

То же самое можно сделать в WebDriver, используя конструктор «Действия».

Надеюсь, этот updated documentation может помочь.

22

Это должно быть сделано! А именно, вам нужно использовать цепочки действий из 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() 

Это переместит мышь 5 пикселей вниз и на 5 пикселей вправо от левого верхнего угла кнопки Я чувствую себя счастливым. Тогда это будет click().

Обратите внимание, что вы должны использовать perform(). Иначе ничего не произойдет.

Смежные вопросы