Sto spostando alcuni test da Selenium al WebDriver. Il mio problema è che non riesco a trovare un equivalente per selenium.wait_for_condition. Le associazioni Python hanno questo al momento o sono ancora pianificate?selenium.wait_for_condition equivalente in binding Python per WebDriver
risposta
Attualmente non è possibile utilizzare wait_for_condition con WebDriver. Il codice del selenio pitone fornisce la classe DrivenSelenium per accedere ai vecchi metodi di selenio, ma non può attendere wait_for_condition. The selenium wiki has some info on that.
La soluzione migliore è utilizzare la classe WebDriverWait. Questa è una classe helper che esegue periodicamente una funzione in attesa che restituisca True. Il mio uso generale è
driver = webdriver.Firefox()
driver.get('http://example.com')
add = driver.find_element_by_id("ajax_button")
add.click()
source = driver.page_source
def compare_source(driver):
try:
return source != driver.page_source
except WebDriverException:
pass
WebDriverWait(driver, 5).until(compare_source)
# and now do some assertions
Questa soluzione non è affatto ideale .. Il try/tranne che è necessario per le situazioni in cui il ciclo di richiesta di pagina/risposta è ritardata in attesa di qualche attività di ajax per completare. Se compare_source viene chiamato nel mezzo del ciclo di richiesta/risposta, genererà un'eccezione WebDriverException.
Il test coverage for WebDriverWait è anche utile da guardare.
L'associazione Java include una classe Wait. Questa classe controlla ripetutamente una condizione (con sleeps tra) fino al raggiungimento di un timeout. Se riesci a rilevare il completamento del tuo Javascript utilizzando la normale API, puoi seguire lo stesso approccio.
Ecco la mia versione della risposta di Greg Sadetsky, messo in una funzione:
def click_n_wait(driver, button, timeout=5):
source = driver.page_source
button.click()
def compare_source(driver):
try:
return source != driver.page_source
except WebDriverException:
pass
WebDriverWait(driver, timeout).until(compare_source)
Si fa clic sul pulsante, attende il DOM di cambiare e poi ritorna.
- 1. Equivalente per LinkedHashMap in Python
- 2. Equivalente per inject() in Python?
- 3. VisualVM equivalente per Python
- 4. Selenio WebDriver esempio in Python
- 5. Passport.js equivalente per Python?
- 6. Equivalente rubino per Python per/
- 7. Python equivalente per #ifdef DEBUG
- 8. Python Selenium WebDriver drag-and-drop
- 9. Come passaggio del mouse in python WebDriver
- 10. Massimizza WebDriver (Selenium 2) in Python
- 11. webdriver attendere per una richiesta jax in python
- 12. Come faccio a impostare proxy per Chrome in python WebDriver
- 13. Cancella browser Cookie con Selenium WebDriver Java binding
- 14. File tmp Python Firefox Webdriver
- 15. opencv macport python binding
- 16. Equivalente TreeSet Java in Python?
- 17. MATLAB ksdensity equivalente in Python
- 18. MATLAB ind2sub equivalente in Python
- 19. C# Parallel.Foreach equivalente in Python
- 20. Elenco PHP() equivalente in Python
- 21. Python Selenium Webdriver - Autenticazione proxy
- 22. log WebDriver per Firefox
- 23. Python "Event" equivalente in Java?
- 24. equivalente urllib.parse.quote() in python 2.7
- 25. Python dir() equivalente in JavaScript?
- 26. Set chrome.prefs con binding python per selenio in chromedriver
- 27. Rilevamento di caratteristiche in OpenCV Python Binding
- 28. Equivalente Python per IFNULL di MySQL
- 29. equivalente PHP per un decoratore python?
- 30. Equivalente thread-safe per time.strptime() di python?
Sembra che tu possa testare la visibilità. 'da selenium.webdriver.support importate condizioni_aspese come ec' e quindi' ec.visibility_of (elm) '. L'oggetto di ritorno è "selenium.webdriver.support.expected_conditions.visibility_of', ma non ho capito come ottenerne la visibilità. – huggie