Pruebas automatizadas web (no se puede localizar el elemento)

Tabla de contenido

1. Anidamiento de marcos/iframes

2. La página salta a una nueva pestaña (cambio de ventana)

3. Cuadro de advertencia emergente (alerta/confirmación/aviso)

4. Cuando el elemento de la página pierde el foco, el script se ejecuta de forma inestable

5. Cambio dinámico de elementos

6. La página no se carga y los elementos de la página se operan

7. Los elementos están bloqueados, no disponibles, invisibles

8. El código JavaScript reemplaza funciones irrealizables

9. Los controles de Windows no se pueden operar durante la carga de archivos

10. El navegador tiene una fuerte seguridad y no permite llamadas entre dominios para reportar errores

1. Anidamiento de marcos/iframes

        Solución:driver.switch_to.frame()

frame_element1 = self.driver.find_element(By.XPATH,"//*[@id=\"login_frame\"]")
time.sleep(1)
self.driver.switch_to.frame(frame_element1)
  • driver.switch_to.parent_frame()volver al marco principal
  • driver.switch_to.default_content()Volver a la página más externa

2. La página salta a una nueva pestaña (cambio de ventana)

         Solución alternativa :driver.switch_to.window(window_handle) cambie a una nueva ventana.

windows = self.driver.window_handles
        self.driver.switch_to.window(windows[1])
#或者for循环遍历
for handle in driver.window_handles:
    # 先切换到该窗口
    wb.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是要操作的窗口
    if '窗口标题' in driver.title:
        # 如果是,那么WebDriver对象就是对应的该窗口,跳出循环
        break

3. Cuadro de advertencia emergente (alerta/confirmación/aviso)

         Solución alternativa :alert = driver.switch_to.alert , donde

  • ventana de alerta: Solicitar información de usuario solo botón de confirmación
  • Ventana de confirmación: con botones de confirmación y cancelación
  • Ventana de aviso: hay cuadros de entrada, botones de confirmación y cancelación
  • texto: Devolver (obtener) la información de texto en alerta/confirmar/solicitar
  • accept(): acepta el cuadro de alerta existente
  • descartar (): descartar el cuadro de advertencia existente
  • send_keys(keys_ToSend): Enviar texto al cuadro de alerta
#切换到alert
        alert = self.driver.switch_to.alert
        print(alert.text)
        sleep(2)
        alert.accept()
#confirm弹框
        self.driver.find_element_by_id('confirm').click()
        confirm = self.driver.switch_to.alert
        print(confirm.text)
        sleep(3)
        #确定
        # confirm.accept()
        #取消
        confirm.dismiss()
#prompt弹框
        self.driver.find_element_by_id('prompt').click()
        prompt = self.driver.switch_to.alert
        print(prompt.text)
        prompt.send_keys('20')
        sleep(3)
        prompt.accept()

4. Cuando el elemento de la página pierde el foco, el script se ejecuta de forma inestable

        Solución :driver.switch_to.active_element

driver.switch_to.active_element.send_keys('filename')
time.sleep(2)

5. Cambio dinámico de elementos

       Solución : localizar por XPATH, driver.find_element(By.XPATH, "" )

6. La página no se carga y los elementos de la página se operan

        Solución 1 :WebDriverWait()Mostrar espera. Espere a que se cargue un solo elemento, que generalmente se usa conuntil()eluntil_not()método.

 WebDriverWait(driver, 10,0.5).until(driver.find_element( By.CSS_SELECTOR,""))

        Solución 2 : time.sleep () obligado a esperar. Cuando se ejecuta la siguiente oración de código, este método de espera ejecuta la siguiente declaración cuando se acaba el tiempo, pero no hay garantía de que el elemento se cargue realmente durante el tiempo de espera.

time.sleep(10) # 表示强行等待10s

        Solución 3 : driver.implicitly_wait()  espera implícitamente. Significa que todos los elementos de la página se cargan dentro del tiempo especificado y luego ejecutan el siguiente paso, de lo contrario, espere hasta que expire el tiempo antes de continuar con el siguiente paso.

driver.implicitly_wait(30) #等待30s

7. Los elementos están bloqueados, no disponibles, invisibles

        Solución 1 :driver.maximize_window()el diseño de los elementos de la página cambia debido al cambio del tamaño de la ventana y los elementos bajo prueba están bloqueados. Puede maximizar la ventana y luego colocar los elementos.
        Solución 2 :.is_enabled()debido a razones comerciales, el elemento no está disponible en algunos casos (atributo del elemento deshabilitado, atenuado), primero verifique si los pasos de prueba se ajustan a la lógica comercial y, en segundo lugar, confirme si se trata de un error en el proceso comercial.
        Solución 3 :.is_displayed()Para elementos cuyos atributos no son necesariamente visibles, primero determine si sus atributos están visibles u ocultos antes de posicionarlos.

8. El código JavaScript reemplaza funciones irrealizables

        Solución 1 : si el contenido de la página es demasiado largo y no puede ver todos los elementos incluso si la ventana está maximizada, puede implementar acciones como arrastrar la barra de desplazamiento mediante la ejecución de scripts de JavaScript. ( Más métodos de implementación de la barra de desplazamiento )

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

        Solución 2 : suponiendo que un cuadro de entrada se puede ubicar mediante id='texto', pero el contenido de texto no se puede ingresar mediante send_keys(), se puede realizar con la ayuda del código JavaScript. ( Más adiciones, eliminaciones, modificaciones y consultas de elementos de la página )

text = "input text"
driver.execute_script("var obj=document.getElementById('text'); obj.value=' " + text + " ';")

9. Los controles de Windows no se pueden operar durante la carga de archivos

        Solución : para cargar complementos, se deben operar los controles de Windows. Puede instalar las herramientas de AutoIt, escribir scripts, guardarlos como archivos ".au3", convertirlos en archivos ".exe" y luego cargarlos/descargarlos de forma automática. guionesos.system("D:\\upfile.exe")_

10. El navegador tiene una fuerte seguridad y no permite llamadas entre dominios para reportar errores

        Solución 1 : configure Signed.applets.codebase_principal_support = true desde el navegador about: config; (ingrese about: config en la barra de direcciones para configurar)

        Solución 2 : agregue el siguiente código antes de la función de código abierto:

try { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
      } 
catch (e) { 
      alert("Permission UniversalBrowserRead denied."); 
      } 

Supongo que te gusta

Origin blog.csdn.net/m0_58807719/article/details/130117450
Recomendado
Clasificación