from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
browser = webdriver.Firefox()
browser.get("http://testsite.com")
element = WebDriverWait(browser, 10).until(lambda browser : browser.find_element_by_id("element"))
element.click() # it actually goes to page http://testsite.com/test-page.html
print "Just clicked! And I'm expecting timeout error!"
new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))
print "Too bad there's no timeout error, why?!"
OK, jak widać, nawet jeśli ustawiłem czas oczekiwania na 0,1 sekundy, nie ma jeszcze zgłoszonego wyjątku limitu czasu. Po wykonaniu element.click()
nie blokuje się do momentu załadowania całej strony i dlatego pojawił się Just clicked! And I'm expecting timeout error!
i ku mojemu zaskoczeniu new_element = WebDriverWait(browser, 0.1).until(lambda browser : browser.find_element_by_id("element"))
poczekaj, aż cała strona się załaduje. A jeśli użyjesz implicit waits
, otrzymasz taki sam wynik.Powiedz mi, dlaczego to nie kończy się z błędem limitu czasu (webmaster selenu 2)?
Chodzi mi o to, że czasami po kliknięciu elementu może minąć nawet kilka godzin, zanim strona załaduje się z powodu złego proxy, i oczywiście NIE chcę chcę czekać tak długo, czego chcesz wyjątek timeout. W takim przypadku, jak by to działało?
Nie rozumiem, co masz na myśli. Czy mógłbyś bardziej konkretnie i jak mogę to zrobić? – Shane
... i po przejściu na 2.22, zdałem sobie sprawę z wszystkich miejsc, w których nieświadomie polegałem na tym domniemanym oczekiwaniu. XD – Isaac
Nie sądzę, żeby to było całkiem słuszne. Mówisz o driver.set_page_load_timeout() Uważam jednak, że nie ma to związku z kliknięciami. Nie wszystkie kliknięcia powodują załadowanie strony. Czas wczytywania strony jest przeznaczony tylko do ładowania strony. Pytający ma również problem z przekroczeniem limitu czasu, po prostu znajdując element (nie trzeba wykonywać żadnych kliknięć). – Purrell