2013-05-29 10 views
11

Używając wersji Selenium w Pythonie, czy możliwe jest kliknięcie jakiegoś elementu w DOM i podanie współrzędnych, w których chcesz go kliknąć? Wersja Java ma metodę clickAt, która faktycznie robi dokładnie to, czego szukam, ale nie może znaleźć odpowiednika w Pythonie.Selen - kliknij w określone miejsce

Odpowiedz

1

ja nie osobiście stosowali tę metodę, ale pominie kodu źródłowego selenium.py Znalazłem następujące metody, które wyglądają tak, jakby by robić to, co chcesz - Wyglądają zawinąć 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,]) 

Pojawiają się w obiekcie selenu, a tutaj jest ich online API documentation.

+0

Świetne !! Do której klasy należą? – davids

+0

Są w obiekcie selenu. Właśnie znalazłem dokumentację interfejsu API online - aktualizując odpowiedź. – Ewan

+0

Jeszcze jedno pytanie. Jak właściwie to wykorzystujesz? Jestem przyzwyczajony do pracy z obiektami webdrivers, ale nigdy nie użyłem tego – davids

4

Powód, dla którego się mylisz, to clickAt to stara metoda v1 (Selenium RC).

WebDriver ma nieco inną koncepcję, od 'Actions'.

W szczególności, budowniczy "działań" dla powiązań Python live here.

Ideą polecenia clickAt jest kliknięcie w określonym położeniu względnie na konkretny element.

To samo można uzyskać za pomocą narzędzia WebDriver, korzystając z narzędzia "Działania".

Mam nadzieję, że ten updated documentation może pomóc.

22

To powinno wystarczyć! Mianowicie musisz używać łańcuchów akcji z webdrivera. Gdy już masz taką instancję, po prostu rejestruj kilka akcji, a następnie zadzwoń pod numer perform(), aby je wykonać.

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() 

Ten ruszy myszką 5 pikseli w dół i 5 pikseli w prawo od lewego górnego rogu przycisk czuję się szczęśliwy. Wtedy będzie to click().

Zauważ, że musisz musi użyć perform(). Inaczej nic się nie stanie.