def finalizar_tiempo_de_ejecucion(self): self.datetime_final = Temporizador.obtener_fecha_tiempo_actual() self.tiempo_fin_de_ejecucion = Temporizador.obtener_tiempo_timer() self.establecer_tiempo_de_ejecucion()
def inicializar_tiempo_de_ejecucion(self): self.datetime_inicial = Temporizador.obtener_fecha_tiempo_actual() self.tiempo_inicio_de_ejecucion = Temporizador.obtener_tiempo_timer()
def establecer_tiempo_de_finalizacion(objeto_json): objeto_json['time'] = Temporizador.obtener_tiempo_timer() # objeto_json['status'] = constantes_json.STATUS_CORRECTO objeto_json['end'] = Temporizador.obtener_fecha_tiempo_actual() return objeto_json
def navegacion_de_carpetas_por_segundos(lista_carpetas, driver, result_list, numero_de_segundos=120): result_navegacion_carpetas = Result() result_navegacion_carpetas.inicializar_tiempo_de_ejecucion() tiempo_por_verificar = numero_de_segundos + Temporizador.obtener_tiempo_timer( ) tiempo_de_inicio = Temporizador.obtener_tiempo_timer() segundos = 0 # verifica se tenga al menos una carpeta if len(lista_carpetas) == 0: result_navegacion_carpetas.finalizar_tiempo_de_ejecucion() result_navegacion_carpetas.establecer_tiempo_de_ejecucion() result_navegacion_carpetas.validacion_correcta = False result_navegacion_carpetas.mensaje_error = 'No fue posible localizar las carpetas dentro de la sesi\u00f3n Exchange OWA' result_list.result_validacion_navegacion_carpetas = result_navegacion_carpetas SeleniumTesting.log.info( 'No se localizaron carpetas por navegar dentro de la sesion en la plataforma Exchange OWA' ) return result_list # verifica que no haya algun mensaje de error en la plataforma, en caso contrario # se muestra el mensaje de error que aparace en la plataforma dentro del result elif SeleniumTesting.verificar_error_plataforma(driver): result_navegacion_carpetas.finalizar_tiempo_de_ejecucion() result_navegacion_carpetas.establecer_tiempo_de_ejecucion() result_navegacion_carpetas.validacion_correcta = False result_navegacion_carpetas.mensaje_error = 'No fue posible realizar la navegacion entre carpetas, se presenta '\ 'el siguiente error dentro de la plataforma: '\ '{}'.format(SeleniumTesting.txt_mensaje_error_encontrado_owa) result_list.result_validacion_navegacion_carpetas = result_navegacion_carpetas return result_list while Temporizador.obtener_tiempo_timer() <= tiempo_por_verificar: for carpeta in lista_carpetas: segundos = Temporizador.obtener_tiempo_timer( ) - tiempo_de_inicio if segundos > numero_de_segundos: SeleniumTesting.log.info( 'Ha transcurrido un lapso aproximado de 2 minutos, se procede a cerrar la sesion dentro de la plataforma OWA' ) break SeleniumTesting.log.info( 'Ingresando a la carpeta: {}'.format(carpeta)) try: if SeleniumTesting.owa_descubierto == 2016: script_click_carpeta = \ ''' var carpeta = document.querySelector("span._n_C4[title='{}']"); return carpeta; '''.format(carpeta) elemento_html_carpeta = driver.execute_script( script_click_carpeta) elemento_html_carpeta.click() time.sleep(6) elif SeleniumTesting.owa_descubierto == 2010: elemento_html_carpeta = driver.find_element_by_xpath( '//a[@name="lnkFldr"][@title="{}"]'.format( carpeta)) time.sleep(3) SeleniumTesting.verificar_dialogo_de_interrupcion( driver, result_navegacion_carpetas) time.sleep(3) elemento_html_carpeta.click() elif SeleniumTesting.owa_descubierto == 2013: script_click_carpeta = \ ''' var carpeta = document.querySelector("span._n_Z6[title='{}']"); return carpeta; '''.format(carpeta) elemento_html_carpeta = driver.execute_script( script_click_carpeta) elemento_html_carpeta.click() time.sleep(6) except StaleElementReferenceException as e: SeleniumTesting.log.error( 'Una de las carpetas no se localiza dentro del DOM de la plataforma OWA, se intentara ingresar nuevamente' ) SeleniumTesting.log.error('error: {}'.format(e.msg)) driver.refresh() SeleniumTesting.log.error( 'Sucedio error al refrescar la plataforma OWA') time.sleep(3) except ElementClickInterceptedException as e: SeleniumTesting.log.error( 'No fue posible navegar a la carpeta seleccionada, se tiene un elemento HTML interfiriendo en la '\ 'navegacion de la carpeta, se intentara ingresar nuevamente') SeleniumTesting.log.error('error: {}'.format(e.msg)) driver.refresh() SeleniumTesting.log.error( 'Sucedio error al refrescar la plataforma OWA') time.sleep(3) except NoSuchElementException as e: SeleniumTesting.log.error( 'No fue posible localizar la carpeta por navegar dentro de la plataforma OWA, se intentara ingresar nuevamente' ) SeleniumTesting.log.error('error: {}'.format(e.msg)) driver.refresh() SeleniumTesting.log.error( 'Sucedio error al refrescar la plataforma OWA') time.sleep(3) except TimeoutException as e: SeleniumTesting.log.error( 'Se presenta error de tiempo de carga en la plataforma OWA, se intentara actualizar la plataforma nuevamente' ) SeleniumTesting.log.error('error: {}'.format(e.msg)) driver.refresh() time.sleep(3) except WebDriverException as e: SeleniumTesting.log.error( 'Se presenta error del webdriver para la navegacion web dentro de la plataforma OWA' ) SeleniumTesting.log.error('error: {}'.format(e.msg)) time.sleep(3) result_navegacion_carpetas.finalizar_tiempo_de_ejecucion() result_navegacion_carpetas.establecer_tiempo_de_ejecucion() # verifica que no haya algun mensaje de error en la plataforma, en caso contrario # se muestra el mensaje de error que aparace en la plataforma dentro del result if SeleniumTesting.verificar_error_plataforma(driver): result_navegacion_carpetas.validacion_correcta = False result_navegacion_carpetas.mensaje_error = 'No fue posible realizar la navegacion entre carpetas, se presenta '\ 'el siguiente error dentro de la plataforma: '\ '{}'.format(SeleniumTesting.txt_mensaje_error_encontrado_owa) else: result_navegacion_carpetas.validacion_correcta = True result_navegacion_carpetas.mensaje_error = constantes_json.OUTPUT_EXITOSO_2_1 result_list.result_validacion_navegacion_carpetas = result_navegacion_carpetas return result_list
def obtener_carpetas_en_sesion(driver): lista_de_carpetas_localizadas = [] lista_nombres_de_carpetas_formateadas = [] clase_css_carpeta_owa_2016 = "_n_C4" clase_css_carpeta_owa_2013 = '_n_Z6' xpath_carpeta_owa_2010 = "//a[@name='lnkFldr']" se_encontraron_carpetas = False tiempo_de_inicio = Temporizador.obtener_tiempo_timer() tiempo_de_finalizacion = 0 while tiempo_de_finalizacion < 60: time.sleep(10) if SeleniumTesting.verificar_elemento_encontrado_por_clase_js( driver, clase_css_carpeta_owa_2016): SeleniumTesting.owa_descubierto = 2016 se_encontraron_carpetas = True elif SeleniumTesting.verificar_elemento_encontrado_por_clase_js( driver, clase_css_carpeta_owa_2013): SeleniumTesting.owa_descubierto = 2013 se_encontraron_carpetas = True elif SeleniumTesting.verificar_elemento_encontrado_por_xpath( driver, xpath_carpeta_owa_2010): SeleniumTesting.owa_descubierto = 2010 se_encontraron_carpetas = True tiempo_de_finalizacion = Temporizador.obtener_tiempo_timer( ) - tiempo_de_inicio if tiempo_de_finalizacion % 20 == 0: SeleniumTesting.navegar_a_sitio( SeleniumTesting.url_owa_exchange) driver.refresh() if se_encontraron_carpetas: SeleniumTesting.log.info('Se localizan con exito las carpetas dentro de la plataforma OWA, en un lapso aproximado'\ ' de {} seg'.format(FormatUtils.truncar_float_cadena(tiempo_de_finalizacion))) break else: SeleniumTesting.log.info( 'Fue imposible localizar las carpetas dentro de la plataforma OWA, se intentara nuevamente' ) SeleniumTesting.log.info( 'Titulo actual de la plataforma: {}'.format(driver.title)) SeleniumTesting.log.info( 'URL actual de la plataforma: {}'.format( driver.current_url)) if se_encontraron_carpetas == False: tiempo_de_finalizacion = Temporizador.obtener_tiempo_timer( ) - tiempo_de_inicio SeleniumTesting.log.error('Han transcurrido mas de {} seg sin localizar'\ ' las carpetas dentro de la plataforma OWA'.format(FormatUtils.truncar_float_cadena(tiempo_de_finalizacion))) SeleniumTesting.log.error( 'Title actual de la plataforma: {}'.format(driver.title)) SeleniumTesting.log.error('Url actual de la plataforma: {}'.format( driver.current_url)) else: SeleniumTesting.log.info( 'Plataforma OWA version {} identificada'.format( SeleniumTesting.owa_descubierto)) time.sleep(4) if SeleniumTesting.owa_descubierto == 2010: lista_de_carpetas_localizadas = driver.find_elements_by_xpath( xpath_carpeta_owa_2010) elif SeleniumTesting.owa_descubierto == 2013: script_js = ''' var elementos = document.getElementsByClassName('_n_Z6'); return elementos; ''' lista_de_carpetas_localizadas = driver.execute_script( script_js) elif SeleniumTesting.owa_descubierto == 2016: script_js = ''' var elementos = document.getElementsByClassName('_n_C4'); return elementos; ''' lista_de_carpetas_localizadas = driver.execute_script( script_js) for carpeta in lista_de_carpetas_localizadas: if SeleniumTesting.owa_descubierto == 2010: nombre_de_carpeta = carpeta.text else: nombre_de_carpeta = FormatUtils.remover_backspaces( carpeta.get_attribute('innerHTML')) SeleniumTesting.log.info( 'Se obtiene la carpeta: {}'.format(nombre_de_carpeta)) lista_nombres_de_carpetas_formateadas.append(nombre_de_carpeta) return lista_nombres_de_carpetas_formateadas
def iniciar_sesion_en_owa(driver, correo_en_prueba, result_list): # verificacion en texto de mensajes de error en inicio de sesion error_security_context = 'NegotiateSecurityContext' # se obtiene la cuenta sin el origen del dominio SeleniumTesting.cuenta_sin_dominio = FormatUtils.formatear_correo( correo_en_prueba.correo) SeleniumTesting.url_owa_exchange = correo_en_prueba.url #xpath de botones owa 2010, 2016, 2013 xpath_btn_owa_2010 = "//input[@type='submit'][@class='btn']" xpath_btn_owa_2013_2016 = "//div[@class='signinbutton']" driver.accept_insecure_certs = True driver.accept_untrusted_certs = True resultado = Result() resultado.tiempo_inicio_de_ejecucion = Temporizador.obtener_tiempo_timer( ) resultado.datetime_inicial = Temporizador.obtener_fecha_tiempo_actual() # resultado.inicializar_tiempo_de_ejecucion() mensaje_error_de_credenciales = None try: # obtiene los elementos html para los campos de usuario, password y el boton de inicio de # sesion time.sleep(3) input_usuario = driver.find_element_by_id('username') input_password = driver.find_element_by_id('password') check_casilla_owa_2010_version_ligera = None boton_ingreso_correo = None # verifica si se encuentra la casilla con el id chkBsc, el cual pertenece a la version # ligera de la plataforma de Exchange 2010 if SeleniumTesting.verificar_elemento_encontrado_por_id( driver, 'chkBsc'): # selecciona el check para ingresar a la plataforma ligera check_casilla_owa_2010_version_ligera = driver.find_element_by_id( 'chkBsc') check_casilla_owa_2010_version_ligera.click() SeleniumTesting.owa_descubierto = 2010 if SeleniumTesting.verificar_elemento_encontrado_por_xpath( driver, xpath_btn_owa_2010): boton_ingreso_correo = driver.find_element_by_xpath( xpath_btn_owa_2010) SeleniumTesting.owa_descubierto = 2010 elif SeleniumTesting.verificar_elemento_encontrado_por_xpath( driver, xpath_btn_owa_2013_2016): boton_ingreso_correo = driver.find_element_by_xpath( xpath_btn_owa_2013_2016) # establece la bandera version owa por analizar SeleniumTesting.owa_descubierto = 2016 # ingresa los datos en cada uno de los inputs localizados en el sitio de owa, uno por # cada segundo time.sleep(1) input_usuario.send_keys(correo_en_prueba.correo) time.sleep(1) input_password.send_keys(correo_en_prueba.password) time.sleep(1) boton_ingreso_correo.click() time.sleep(18) SeleniumTesting.log.info( 'Titulo actual de la plataforma: {}'.format(driver.title)) SeleniumTesting.log.info('URL actual de la plataforma: {}'.format( driver.current_url)) except NoSuchElementException as e: resultado.mensaje_error = 'No fue posible iniciar sesion dentro de la plataforma OWA, '\ 'no se localizaron los inputs para ingresar las credenciales de la cuenta '\ 'de correo electronico Exchange: {}'.format(SeleniumTesting.formatear_excepcion(e)) resultado.validacion_correcta = False SeleniumTesting.log.error(resultado.mensaje_error) except WebDriverException as e: resultado.mensaje_error = 'No fue posible ingresar a la plataforma de Exchange OWA, favor de verificar'\ ' si se tiene conectividad por internet, error detallado : {}'.format(SeleniumTesting.formatear_excepcion(e)) resultado.validacion_correcta = False SeleniumTesting.log.error(resultado.mensaje_error) # verifica que se haya ingresado correctamente al OWA, se localiza si esta establecido # el mensaje de error de credenciales dentro del aplicativo del OWA if resultado.validacion_correcta == False: try: if SeleniumTesting.owa_descubierto == 2010: mensaje_error_de_credenciales = driver.find_element_by_id( 'trInvCrd') SeleniumTesting.log.error( 'No fue posible ingresar a la plataforma OWA, se tiene error de credenciales' ) mensaje_error_de_credenciales = driver.find_element_by_xpath( "//tr[@id='trInvCrd']/td") texto_mensaje_error = mensaje_error_de_credenciales.get_attribute( 'innerHTML') SeleniumTesting.log.error('Se muestra el siguiente mensaje de error de credenciales: {} '\ .format(texto_mensaje_error)) resultado.mensaje_error = 'No fue posible ingresar a la plataforma OWA, se tiene error de credenciales: {}'\ .format(mensaje_error_de_credenciales.get_attribute('innerHTML')) resultado.validacion_correcta = False elif SeleniumTesting.owa_descubierto == 2016 or SeleniumTesting.owa_descubierto == 2013: mensaje_error_de_credenciales = driver.execute_script(''' var mensaje_error = document.querySelector("#signInErrorDiv").innerText; return mensaje_error; ''') SeleniumTesting.log.error( 'No se puede ingresar al aplicativo debido a error de credenciales:' ) SeleniumTesting.log.error('Se muestra el siguiente mensaje de advertencia: {} '\ .format(mensaje_error_de_credenciales)) resultado.mensaje_error = 'No fue posible ingresar a la plataforma OWA, se tiene error de credenciales: '\ '{}'.format(mensaje_error_de_credenciales) resultado.validacion_correcta = False except NoSuchElementException as e: resultado.mensaje_error = constantes_json.OUTPUT_EXITOSO_1_1 resultado.validacion_correcta = True SeleniumTesting.log.info(resultado.mensaje_error) except InvalidSessionIdException as e: resultado.mensaje_error = 'No fue posible ingresar a la plataforma de Exchange OWA, favor de verificar '\ 'si se tiene conectividad por internet, error detallado : {}'.format(e) resultado.validacion_correcta = False SeleniumTesting.log.error(resultado.mensaje_error) except JavascriptException as e: # Se ingresa correctamente, debido a que no se encontro el mensaje de error de credenciales incorrectas resultado.mensaje_error = constantes_json.OUTPUT_EXITOSO_1_1 resultado.validacion_correcta = True SeleniumTesting.log.info(resultado.mensaje_error) except WebDriverException as e: # Se ingresa correctamente, debido a que no se encontro el mensaje de error de credenciales incorrectas resultado.mensaje_error = constantes_json.OUTPUT_EXITOSO_1_1 resultado.validacion_correcta = True SeleniumTesting.log.info(resultado.mensaje_error) # realiza la validacion de ingreso correcto de sesion # se verifica que no haya algun error que se presente en la plataforma # en caso contrario se obtiene el mensaje del error y se establecer en el # objeto resultado if SeleniumTesting.verificar_error_plataforma(driver): resultado.mensaje_error = 'No fue posible ingresar a la sesion, se presenta '\ 'el siguiente mensaje de error en la plataforma: {}'.format(SeleniumTesting.txt_mensaje_error_encontrado_owa) resultado.validacion_correcta = False resultado.finalizar_tiempo_de_ejecucion() resultado.establecer_tiempo_de_ejecucion() result_list.result_validacion_acceso_portal_owa = resultado return result_list