2013-05-29 27 views
11

Verwenden Sie die Python-Version von Selenium, ist es möglich, auf ein Element im DOM zu klicken und die Koordinaten anzugeben, auf die Sie klicken möchten? Die Java-Version hat die Methode clickAt, die tatsächlich genau das tut, was ich suche, aber nicht das Äquivalent in Python finden kann.Selen - Klicken Sie auf eine bestimmte Position

Antwort

1

ich nicht persönlich diese Methode verwendet haben, aber den Quellcode selenium.py Blick durch Ich habe die folgenden Methoden gefunden, die wie sie aussehen würde tun, was Sie wollen - Sie sehen aus clickAt wickeln:

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,]) 

Sie erscheinen im Selen-Objekt und hier ist ihre online API documentation.

+0

Großartig !! Zu welcher Klasse gehören sie? – davids

+0

Sie sind im Selen-Objekt. Ich habe gerade ihre API-Dokumentation online gefunden - Update-Antwort. – Ewan

+0

Nur noch eine Frage. Wie benutzt du das eigentlich? Ich bin es gewohnt, mit Webdrivers-Objekten zu arbeiten, habe diese aber nie benutzt – davids

4

Der Grund, warum Sie verwirrt sind, ist clickAt ist eine alte v1 (Selen RC) -Methode.

WebDriver hat ein etwas anderes Konzept, von .

Speziell der Builder 'Aktionen' für die Python-Bindungen Live here.

Die Idee des Befehls clickAt ist, auf eine bestimmte Position relativ zu einem bestimmten Element zu klicken.

Das Gleiche ist innerhalb des WebDrivers mit dem Builder 'Aktionen' erreichbar.

Hoffentlich kann dies updated documentation helfen.

22

Dies sollte es tun! Sie müssen nämlich Aktionsketten von Webdriver verwenden. Sobald Sie eine Instanz davon haben, registrieren Sie einfach eine Reihe von Aktionen und rufen dann perform(), um sie auszuführen.

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

Dies wird die Maus 5 Pixel nach unten und 5 Pixel rechts von der linken oberen Ecke der Taste Ich fühle mich glücklich bewegen. Dann wird es click().

Beachten Sie, dass Sie perform() verwenden müssen. Sonst wird nichts passieren.

Verwandte Themen