2013-05-30 11 views
6

Chcę kliknąć przycisk, który jest widoczny po zawisnięciu. Jego html jest:Jak kliknąć element widoczny po zawisnięciu za pomocą selenu?

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

Użyłem tego kodu:

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

to nie działa choć. Dostałem błąd związany z ostatniej linii kodu element.click():

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

Wszelkie sugestie proszę?

+0

Błędy są dokładnie tym, co? – Arran

+0

@ Arran, zredagowałem pytanie. – nutship

Odpowiedz

9

Założę się, że powinieneś poczekać na element, aż stanie się widoczny.

trzy opcje:

  • połączeń time.sleep(n)
  • użycie WebDriverWait jak jest to sugerowane here, here i here

pójdę z drugiej opcji.

UPD:

W tym szczególnym miejscu unoszącego poprzez selenem nie działa w ogóle, więc jedyną opcją było kliknąć na przycisk użyciem js poprzez execute_script:

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

nadzieję, że pomoże.

+0

Dzięki za sugestie, ale wypróbowałem 'time.sleep' faktycznie i wydaje się, że tak nie jest. – nutship

+0

OK, 'WebDriverWait' powinno działać, daj mi znać, jeśli będziesz mieć z tym problemy. – alecxe

+0

Przepraszamy za późną odpowiedź, ale musieliśmy przeczytać twoje linki. Nadal uważam, że mój problem jest inny, ponieważ element/przycisk w moim przypadku jest widoczny/dostępny przez cały czas. Dzięki temu mogę najechać na nią natychmiast po załadowaniu strony. Nie ma między nimi wykonywania kodu ajax/js. Po prostu nie mogę poprawnie zlokalizować elementów za pomocą 'find_element_by' lub' xpath'. – nutship

Powiązane problemy