¿Cómo encapsula los métodos Selenium Python?
En el proceso de usar Selenium para pruebas de automatización web, a menudo encontramos varios problemas, como:
1. el elemento de búsqueda de selenio generará una excepción, lo que provocará que el script deje de ejecutarse.
2. Después de escribir el script, descubrí que la lógica del código no era lo suficientemente clara y difícil de mantener, lo que reducía la eficiencia de las pruebas.
Por lo tanto, es necesario encapsular selenio para que el marco sea más adecuado para las necesidades de la empresa. La siguiente es la encapsulación de la clase base, que utiliza principalmente el modo singleton para almacenar código de lógica empresarial en diferentes archivos Python.
Nota: BASE_URL es la dirección de inicio de sesión del parque de blogs.
1 # -*-Codificación: utf-8 -*-? 2¿Importar el controlador web desde Selenium? 3. ¿Tiempo de importación? 4?5 OVER_TIME = 5?6 BASE_URL = " nb logs . com/user/sign in? ReturnUrl=hFwww.cnblogs.com2F "? 7 ? 8 ? 9 controlador de clase (objeto): 10 ? 11 def _ _ new _ (CLS, * args, ** kW): 12 "" 13 Utilice el modo singleton para configurar una clase para que tenga solo una instancia en tiempo de ejecución. 14 Se pueden crear múltiples objetos cuando se usan clases base en otras clases de Python. Asegúrese de que todos los objetos estén basados en el navegador 15 "" 16 Sin hasattr(CLS, '_instance'): 17 orig = super(driver, cls) 18 cls. _instance = orig.__new__(cls, *args, **kw) 19 devuelve cls. _instance 20? 21 def start(self, url=BASE_URL, driver_name="Chrome"): 22 ""23 Inicie el navegador 24: param url: Dirección de prueba 25: param driver_name: establezca el tipo de navegador al inicio 26: return: 27 " " 28 if nombre_controlador == " Firefox ": 29 self driver = controlador web. Firefox()30 elif driver_name == " Es decir ": 31 self driver = controlador web. es decir() 32 else: 33 self controlador = controlador web. chrome()34 self driver . implícitamente _ wait(OVER _ TIME)35 self driver . get(URL)36 self driver .maximizar _ window()37?38 def get_url(self): 39 " " "Volver a navegando La dirección del servidor " " 40 return BASE_URL 41? 42 def find _ element (self, by, value): 43 """44 Aquí se agrega un OVER_TIME como tiempo de espera para buscar elementos. Establezca el tamaño OVER_TIME para I en el rango 45 " " 46 (OVER_TIME): 47 intente: 48 regrese a sí mismo. conductor.
buscar _ elemento (por = por, valor = valor) 49 Excepción, e: 50 imprimir e 51? 52 def buscar_elementos (self, por, Valor): 53 " "Consistente con buscar_elemento " " 54 para I en el rango (durante _ tiempo) ): 55 intentar: 56 volver a sí mismo. conductor. buscar _ elementos (por = por, valor = valor) 57 Excepción, e: 58 imprimir e 59? 60 def Buscar _ mostrar _ elementos (auto, por, valor): 61 """ 62 Buscar un conjunto de elementos en la pantalla state Cuando se busca un tipo de elementos, 63 a menudo algunos elementos son invisibles. Esta función enmascara esos elementos invisibles 64 " " 65 para I en el rango (durante _ tiempo): 66 intento: 67 elementos = _ elementos (por =. por, valor = valor) 68 num = elementos. __len__() 69 excepto excepciones, e: 70 print e 71 time .72 if num gt;= 1: 73 break 74 display _ elemento = []75 #Put los elementos visibles en la lista y devuelve 76:77 elemento = elementos _ _ getitem _ (j) 78 si el elemento es _ mostrado() _ elemento append (elemento) 80 return display_element 81 82 def está _ elemento _ presente (. self, by, value): 83 ""Determinar si un elemento existe" " 84 try: 85 self Buscar _ elemento (by. = by, valor=Valor) 86 Devolver Verdadero 87 Excepto excepción, e: 88 Imprimir e 89 Devolver Falso 90? 91 def cerrar(self): 92 self driver . close() 93 ? 94 def quit(self): 95 u " " "Salir del navegador" " 96 self.driver.quit() 97?98 name _ _ = = " _ _ main _ _ ":99 page = Driver()100 page()
En segundo lugar, utilice el marco encapsulado y el patrón de objeto de página para diseñar el script de inicio de sesión.
1 # -*-Codificación: utf-8 -*- 2 Importar controlador desde webdriver 3 Importar desde selenium.webdriver.common.by Por 4?5?6 Inicio de sesión de clase (objeto): 7?8 def __init__(self, nombre_usuario="xxx", pwd="XXX"): 9 self. página = Driver()10 página = self página 11 inicio(URL = página. get_URL())12 self. página buscar _ elemento (por . ID, "entrada 1") 13 self pwd = página buscar _ elemento (por . ID, "entrada 2") 14 self iniciar sesión _ BTN = página. .ID,"iniciar sesión")15 self.login(nombre de usuario, contraseña)16 17 def inicio de sesión(nombre de usuario, contraseña): 18 self.username.clear()19 self.username.send_keys(nombre de usuario)20 self clear . ()21 self .pwd .enviar _ claves (contraseña) 22 self .iniciar sesión _ Bt
En tercer lugar, abra las subpáginas de noticias, preguntas del blog, etc. del parque de blogs.
1 # -*-Codificación: utf-8 -*- 2 Importar controlador desde webdriver 3 Importar inicio de sesión desde inicio de sesión 4 Importar desde selenium.webdriver.common.by ¿Por 5? 6? ): 8? 9 def _ _ init _ _ (self): 10 self página = Driver() 11 página = self 12 página de inicio = página _ elemento (Por. LINK_TEXT, U"Garden ". ) 13 self .noticias_página = página .buscar_elemento (por .LINK_TEXTO, U "noticias") 14 self .q_página=página_buscar_elemento (por .LINK_TEXTO, U "membrillo") 16 17 def open_home_page(self): 15 selfhome_page clic()19 20 def open_news_page(self).
:21 self.noticias_página.click()22 23 def abrir_q_page(self):24 self.q_page. página, haga clic()28 29 30 if _ _ nombre _ _ = = ' _ _ principal _ _ ': 31 iniciar sesión (" XXX ", " XXX ") 32 sub = SubPage() 33 abrir _ q _ página. ()
Cuarto, otros
Según este modelo, los blogueros pueden implementar scripts de prueba automatizados basados en el negocio específico de la empresa. Este artículo es un tema de discusión. Si tiene otras ideas mejores, podemos discutirlas juntos.