2013-05-30 4 views
6

Ich möchte auf eine Schaltfläche klicken, die nach dem Schweben sichtbar ist. Sein html ist:Wie klickt man auf ein Element, das nach dem Schweben mit Selen sichtbar ist?

<span class="info"></span> 

ich diesen Code verwendet:

import selenium.webdriver as webdriver 
from selenium.webdriver.common.action_chains import ActionChains 

url = "http://example.com" 

driver = webdriver.Firefox() 
driver.get(url) 
element = driver.find_element_by_class_name("info") 
hov = ActionChains(driver).move_to_element(element) 
hov.perform() 
element.click() 

Es ist allerdings nicht zu arbeiten. Ich habe einen einen Fehler mit der letzten Zeile des Codes verbunden element.click():

selenium.common.exceptions.ElementNotVisibleException: Message: \ 
u'Element is not currently visible and so may not be interacted with' 

Anregungen bitte?

+0

Die Fehler sind was genau? – Arran

+0

@Arran, ich habe die Frage bearbeitet. – nutship

Antwort

9

Ich wette, Sie sollten auf das Element warten, bis es sichtbar wird.

drei Optionen:

  • Anruf time.sleep(n)
  • Verwendung WebDriverWait wie es here vorgeschlagen, here und here

ich mit der zweiten Option gehen würde.

UPD:

An diesem besonderen Ort über Selen schweben überhaupt nicht arbeiten, so dass die einzige Möglichkeit war, auf der Schaltfläche über execute_script mit js klicken:

driver.execute_script('$("span.info").click();') 

Hoffnung, das hilft.

+0

Danke für Vorschläge, aber ich habe 'time.sleep' tatsächlich versucht und es scheint, dass es nicht der Fall ist. – nutship

+0

Ok, 'WebDriverWait' sollte funktionieren, lassen Sie mich wissen, wenn Sie Probleme damit haben. – alecxe

+0

Sorry für die späte Antwort aber musste Ihre Links durchlesen. Ich denke immer noch, dass mein Problem anders ist, da das Element/Button in meinem Fall ständig sichtbar/zugänglich ist. So kann ich sofort über die Seite blättern, wenn die Seite geladen wird. Es gibt keine Ajax/Js-Code-Ausführung dazwischen. Ich bin einfach nicht in der Lage, die Elemente entweder mit 'find_element_by' oder' xpath' korrekt zu lokalisieren. – nutship