2013-05-29 14 views
11

Utilizzando la versione Python di Selenium, è possibile fare clic su alcuni elementi nel DOM e specificare le coordinate in cui si desidera fare clic su di esso? La versione Java ha il metodo clickAt, che in realtà fa esattamente quello che sto cercando, ma non riesce a trovare l'equivalente in Python.Selenio - Fare clic in una determinata posizione

risposta

1

non ho usato personalmente questo metodo, ma guardando attraverso il codice sorgente di selenium.py ho trovato i seguenti metodi che sembrano farei ciò che si vuole - Cercano di avvolgere 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,]) 

Vengono visualizzati nell'oggetto selenio e qui è il loro online API documentation.

+0

Ottimo !! A quale classe appartengono? – davids

+0

Sono nell'oggetto di selenio. In realtà ho appena trovato la documentazione dell'API online, aggiornando la risposta. – Ewan

+0

Ancora una domanda. Come lo usi effettivamente? Sono abituato a lavorare con oggetti di webdriver, ma non ho mai usato questo – davids

4

Il motivo per cui ci si confonde è clickAt è un vecchio metodo v1 (Selenium RC).

WebDriver ha un concetto leggermente diverso, di 'Actions'.

In particolare, il builder "Azioni" per i binding Python è attivo here.

L'idea del comando clickAt consiste nel fare clic su una determinata posizione relativo a in un elemento particolare.

Lo stesso è ottenibile all'interno del WebDriver, utilizzando il builder 'Azioni'.

Speriamo che questo updated documentation possa essere d'aiuto.

22

Questo dovrebbe farlo! Vale a dire che è necessario utilizzare le action chain da Webdriver. Una volta che hai un'istanza di questo, devi semplicemente registrare un gruppo di azioni e quindi chiamare perform() per eseguirle.

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

Questo sposterà il mouse 5 pixel in verticale e 5 pixel a destra dall'angolo in alto a sinistra del pulsante Mi sento fortunato. Quindi sarà click().

Si noti che si deve utilizzare perform(). Altrimenti non accadrà nulla.

Problemi correlati