Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis del código fuente de webdriver

Análisis del código fuente de webdriver

Antecedentes

En el proceso de automatización de la interfaz de usuario, inevitablemente encontrará problemas de carga, un entorno inestable y una velocidad de red lenta. Si no hace nada, se informará un error porque no se puede encontrar el elemento.

Otra situación es que la página utiliza el mecanismo de carga asincrónica ajax (ahora se reinicia, el cliente y el servidor están separados) y no sabes cuándo llegará la página. En este momento usaremos espera. En Selenium, tenemos tres tipos de espera, a saber, espera fija, espera implícita y espera explícita.

Time.Sleep

Espera fija, la esencia es: dejar que el hilo actual duerma, la esencia es bloquear el hilo, lo que se logra esperando.

Desventajas: Las malas condiciones de la red hacen perder tiempo y afectan gravemente el rendimiento del proyecto.

Beneficios: se pueden utilizar scripts de depuración.

Espera implícita

La espera implícita es esencialmente: establecer un tiempo máximo de espera al comienzo del script. Si la página web se carga dentro del tiempo especificado, continúe con el siguiente paso; de lo contrario, se puede generar una excepción. La espera implícita funciona durante todo el ciclo de conducción. Simplemente configúrela una vez al principio. No la trate como una espera fija.

Desventajas: JavaScript suele cargarse al final de nuestro cuerpo. De hecho, se han cargado todos los elementos de la página, pero todavía estamos esperando que se carguen todas las páginas.

WebDriverWait

Espera explícita, esencia: espera dinámica, para determinar si ha aparecido un elemento, como si el título se llama Baidu o Baidu Search, sondeo basado en algunas condiciones dinámicas. sondeará continuamente si la condición de detección es exitosa o fallida, por ejemplo, detectará si el elemento fue exitoso o falló una vez cada 0,5 segundos y establecerá el tiempo de espera de sondeo al mismo tiempo.

Si se configuran la espera explícita y la espera implícita al mismo tiempo, se ejecutará el que tenga el tiempo de espera más largo y el tiempo de espera más largo.

Espera explícita

Componente

Importar WebDriverWait desde el soporte del controlador web selenium. Espera

Código fuente de WebDriverWait

.

# Licenciado para Software Freedom Conservancy (SFC)

# o licencias de múltiples contribuyentes. Consulte el documento de aviso

# distribuido con este libro para obtener más información

# sobre la propiedad de los derechos de autor. SFC otorga la licencia de este documento

# bajo la Licencia Apache, versión 2.0 (la

# "Licencia" no puede usarse excepto en cumplimiento de los requisitos

);

#Traiga una licencia. Puede obtener una copia de la licencia en

#

# mon.exceptions import NoSuchElementException

Importar excepciones de tiempo de espera desde selenium.common.exceptions

POLL_FREQUENCY = 0.5 #Tiempo de suspensión entre llamadas a métodos

IGNORED _ EXCEPTIONS = (NoSuchElementException,) #Excepciones ignoradas al llamar a métodos

Clase WebDriverWait (objeto):

def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignore_exceptions=None):

" " "Constructor, toma una instancia de WebDriver, tiempo de espera en segundos.

: Parámetros:

- Instancia del controlador WebDriver (es decir, Firefox, Chrome o Remote)

- tiempo de espera - Número de segundos antes del tiempo de espera

- poll_frequency - El intervalo de suspensión entre llamadas

De forma predeterminada, es 0,5 segundos

- ignore_exceptions - Estructura iterable de clases de excepción que se ignoran durante las llamadas.

De forma predeterminada, solo contiene NoSuchElementException.

Ejemplo:

Importar WebDriverWait desde selenium.webdriver.support.ui

elemento = WebDriverWait(controlador, 10). hasta que (lambda x:x. find _ element _ by _ id(" someId "))

está _ impresionado = controlador web wait(driver, 30, 1, (ElementNotVisibleException)).

hasta que _ not(lambda x:x . find _ element _ by _ id(" someId ").is_displayed())

"""

self._driver = conductor

self. _timeout = tiempo de espera

self. poll = poll_frequency

#evitar ceros

if self._poll == 0:

self._poll = POLL_frequency

excepciones = list(IGNORED_EXCEPTIONS)

si las excepciones_ignoradas no son Ninguna:

Intenta :

excepciones . extend(ITER(ignored _ excepciones))

Error de tipo de excepción: # ignore_exceptions no es iterable

excepciones .append(ignored_exceptions)

self. _ignored_exceptions = tupla(excepciones)

def __repr__(self):

Devuelve p>

tipo(self), self _driver. session_id)

def hasta(self, método, mensaje= ' '):

" "" Llamar al método proporcionado por el controlador como parámetro hasta

el valor de retorno no es falso. """

screen=None

stacktrace=None

end_time = time.time() + self._timeout

Aunque correcto :

Pruebe:

valor = método(self._driver)

si valor:

valor de retorno

Excepción excepto self _ignored_de la forma:

screen = getattr(exc,' screen',None)

stacktrace = getattr(exc,'stacktrace', None)

time.sleep(self._poll)

if time . time()> hora de finalización:

Roto

Genera una excepción de tiempo de espera (mensaje , pantalla, seguimiento de pila)

def Until_not(self, método, mensaje= ' '):

" " "Llame al método proporcionado por el controlador como parámetro, hasta

el valor de retorno es falso. """

end_time = time.time() + self._timeout

Aunque es correcto:

Pruebe:

Valor = método (self._driver)

si no es un valor:

valor de retorno

excepto self.

_Ignore_Exception:

Devuelve verdadero

time.sleep(self._poll)

if time.time()>hora de finalización:

time.sleep(self._poll)

p>

Roto

Provocar excepción de tiempo de espera (mensaje)

Parámetros:

Ejemplo de tres modos de espera

Desde Selenium importar webdriver

ir a dormir desde el momento

importar WebDriverEsperar desde selenium.webdriver.support.wait

importar la condición esperada de selenium.webdriver.support como EC

#Tres métodos de espera

Caso de prueba de clase (objeto):

def __init__(self ):

self.driver = webdriver. chrome()

self.driver.get(' ')

dormir(2)

def test_sleep(self):

autocontrolador. buscar _ elemento _ por _ id ('kw'). send_keys("selenium ")

sleep(2) #Implementación de hilo en modo de espera de bloqueo

self driver find _ element _ by _ id(' su '). click()

Dormir(3)

self.driver.quit()

def time_implicitly(self):

self . controlador . implícitamente _ esperar(10)

self controlador . send_keys("webdriver ")

self controlador buscar _ elemento _ por _ id(' su '). click()

#sleep(2)

self.driver.quit()

definir time_wait(self):

esperar = WebDriverWait(self.driver, 2, 0.5)

Wait.until(EC.title_is('Baidu, lo sabrás'))

self driver . '). send_keys("webdriver ")

self controlador buscar _ elemento _ por _ id(' su '). hacer clic()

dormir(2)

self.driver.quit()

if __name__=="__main__ ":

case=testcase()

#case.test_sleep()

# case.time_implicitly()

case.time_wait()