2010-09-12 11 views

Respuesta

9

Actualmente no es posible usar wait_for_condition con WebDriver. El código de selenio de python proporciona la clase DrivenSelenium para acceder a los antiguos métodos de selenio, pero no puede esperar wait_for_condition. The selenium wiki has some info on that.

Su mejor opción es utilizar la clase WebDriverWait. Esta es una clase auxiliar que periódicamente ejecuta una función esperando que devuelva True. Mi uso general es

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 

Esta solución no es en absoluto ideales .. El try/except es necesario para situaciones en las que se retrasa el ciclo de solicitud de página/respuesta a la espera de alguna actividad ajax para completar. Si se llama a compare_source get en medio del ciclo de solicitud/respuesta lanzará una WebDriverException.

El test coverage for WebDriverWait también es útil a la vista.

+0

Parece que puede probar la visibilidad. 'from selenium.webdriver.support import expected_conditions como ec' y luego' ec.visibility_of (olmo) '. El objeto de retorno de eso es 'selenium.webdriver.support.expected_conditions.visibility_of' pero no he descubierto cómo sacarle visibilidad. – huggie

0

La vinculación de Java incluye una clase de espera. Esta clase verifica repetidamente una condición (con reposo entre) hasta que se alcanza un tiempo de espera. Si puede detectar la finalización de su Javascript utilizando la API normal, puede tomar el mismo enfoque.

2

aquí está mi versión de la respuesta de Greg Sadetsky, poner en una función:

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) 

que haga clic en el botón, espera a que el DOM para cambiar y luego regresa.

Cuestiones relacionadas