Registro de prueba (principiante)

1. Aplicación básica de registros

#日志:纪录系统运行的信息,记录系统发生的事件日志文件
#作用:了解系统运行的状态,去定位和分析错误问题

#debug:调试1级别
#info:系统正常运行2级别
#warning:警告信息程序有问题,但是他又不影响程序运行不会提Bug3级别默认的级别
#error:错误,出现问题,提bug4级别
#critical:严重的,快要崩溃
#常用:info,error
#反应出问题的严重程度


#logging能够设置日志级别生成日志信息,自带的不需要安装
importlogging

#设置日志级别
#logging.basicConfig(level=logging.DEBUG)

#想要生成日志信息调用日志级别

logging.debug("debug信息")
logging.error("erroe信息")
logging.info("info信息")
logging.warning("warning信息")
logging.critical("critical信息")

resultado de la operación:

#设置日志级别
logging.basicConfig(level=logging.DEBUG)

resultado de la operación:

Campo de cadena de formato:

%(asctime)s hora en que ocurrió el evento de registro - hora legible por humanos, por ejemplo: 2003_07_08 16:47:45,896

%(created)f La marca de tiempo del evento del evento de registro, que es el valor devuelto por la función time() cuando se llama a la hora en ese momento

%(relativeCreated)d El número relativo de milisegundos cuando ocurrió el evento de registro en relación con el tiempo de carga del módulo de registro (aún no sé por qué se usa)

%(msegs)d milisegundos parte del tiempo del evento de registro

%(levelname)s El nivel de registro textual del registro ('DEBUG','INFO','WARNING','ERROR','CRITICAL')

El nombre del registrador usado por %(name)s, el predeterminado es 'root', porque rootLogger se usa de manera predeterminada

%(message)s El contenido de texto del registro, oh, eso se calcula mediante msg % args

%(pathname)s La ruta completa del archivo de código fuente que llama a la función de registro

%(filename)s La parte del nombre de archivo de la ruta, incluido el sufijo del archivo'

%(módulo)s La parte del nombre del nombre del archivo, sin incluir el sufijo del archivo

%(lineo)d El número de línea del código fuente que llamó a la función de registro

%(funcName)s el nombre de la función que llamó a la función de registro

#日志:纪录系统运行的信息,记录系统发生的事件日志文件
#作用:了解系统运行的状态,去定位和分析错误问题

#debug:调试1级别
#info:系统正常运行2级别
#warning:警告信息程序有问题,但是他又不影响程序运行不会提Bug3级别默认的级别
#error:错误,出现问题,提bug4级别
#critical:严重的,快要崩溃
#常用:info,error
#反应出问题的严重程度


#logging能够设置日志级别生成日志信息,自带的不需要安装
importlogging

#生成日志信息生成时间文件名日志的状态类名方法名日志内容

fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'

#设置日志级别
logging.basicConfig(level=logging.DEBUG,format=fmt)

#想要生成日志信息调用日志级别
logging.debug("debug信息")
logging.error("erroe信息")
logging.info("info信息")
logging.warning("warning信息")
logging.critical("critical信息")

 resultado de la operación:

La información de registro solo se guardará en el archivo log.log, y la consola no generará información de registro, que debe optimizarse

2. Cómo aplicar el registro en el marco

Primero cree un marco de inicio de sesión automatizado simple

Login_page.py implementa una operación de inicio de sesión

from selenium import webdriver
from selenium.webdriver.common.by import By

from base_page import BasePage


classLoginPage(BasePage):
#采用POM思想,将元素定位拿出来找到输入框输入用户名和密码,找到登录按钮登录
#因为页面元素容易更改,所以将页面元素单独拎出来,方便后期修改
#页面元素
user=(By.NAME,'accounts')
pwd=(By.NAME,'pwd')
button=(By.NAME,'/html/body/div[4]/div/div[2]/form/div[3]/button')
#页面元素
url='http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html'

#页面的操作流程
deflogin(self,txt,pwd_):
#原本的写法:self.driver.find_element_by_name('accounts').sendkeys('666666')
#为了不写多余的代码,利用关键字驱动进行了封装
self.open(self.url)
self.max()
self.input(self.user,txt)
self.input(self.pwd,pwd_)
self.click(self.button)


if__name__=='__main__':
driver=webdriver.Chrome()
user='666666'
pwd='111111'
Ip=LoginPage(driver)
Ip.login(user,pwd)

como muestra la imagen:

Base_page.py implementa el inicio de sesión basado en palabras clave

from selenium import webdriver
import logging


class BasePage:
#构造函数
def__init__(self,driver):
self.driver=driver

#访问url
def open(self,url):
self.driver.get(self.url)

#退出
def quit(self):
self.driver.quit()

#元素定位
def locator(self,loc):
returnself.driver.find_element(*loc)

#输入
def input(self,loc,txt):
self.locator(loc).send_keys(txt)

#点击
def click(self,loc):
self.locator(loc).click()

#窗体最大化
de fmax(self):
self.driver.maximize_window()

Cómo agregar registros a este marco de inicio de sesión

Agregar operaciones de entrada, operaciones de clic, etc. al archivo de registro

Llame a la clase de registro

from selenium import webdriver
#日志

#logging能够设置日志级别生成日志信息,自带的不需要安装
import logging

#生成日志信息生成时间文件名日志的状态类名方法名日志内容

fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'

#设置日志级别,日志格式,生成的日志文件保存到log.log
logging.basicConfig(level=logging.INFO,format=fmt,filename='./log.log')

class BasePage:
#构造函数
def__init__(self,driver):
logging.info("初始化driver{}".format(driver))
self.driver=driver

#访问url
def open(self,url):
logging.info("访问{}网址".format(url))
self.driver.get(self.url)

#退出
def quit(self):
logging.info("退出网址")
self.driver.quit()

#元素定位
def locator(self,loc):
logging.info("正在定位{}元素".format(loc))
returnself.driver.find_element(*loc)

#输入
def input(self,loc,txt):
logging.info("正在定位{}元素,输入{}内容".format(loc,txt))
self.locator(loc).send_keys(txt)
#点击
def click(self,loc):
logging.info("正在点击{}元素".format(loc))
self.locator(loc).click()

#窗体最大化
def max(self):
self.driver.maximize_window()

Resultado en ejecución: mostrar error de contraseña

 

Dónde iniciar sesión en el marco, en la parte inferior del marco, basado en palabras clave, en el método de inicio de sesión, el método es correcto, intente excepto capturar registros de errores

3. Optimizar el módulo de registro

1. Escriba el registro por separado como un método empaquetado

Tenga en cuenta que el método tiene un valor de retorno

2. El archivo basado en palabras clave debe llamar al archivo de registro

from selenium import webdriver
#logging能够设置日志级别生成日志信息,自带的不需要安装
#import logging
##生成日志信息生成时间文件名日志的状态类名方法名日志内容
#fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'
##设置日志级别,日志格式,生成的日志文件保存到log.log
#logging.basicConfig(level=logging.INFO,format=fmt,filename='./log.log')

from baselog import test_log

#实例化对象要顶格写
log=test_log()


class BasePage:
#构造函数
def__init__(self,driver):
#logging.info("初始化driver{}".format(driver))
log.info("初始化driver{}".format(driver))
self.driver=driver
#访问url
def open(self,url):
log.info("访问{}网址".format(url))
#logging.info("访问{}网址".format(url))
self.driver.get(self.url)
#退出
def quit(self):
#logging.info("退出网址")
log.info("退出网址")
self.driver.quit()
#元素定位
def locator(self,loc):
#logging.info("正在定位{}元素".format(loc))
log.info("正在定位{}元素".format(loc))
returnself.driver.find_element(*loc)
#输入
def input(self,loc,txt):
#logging.info("正在定位{}元素,输入{}内容".format(loc,txt))
log.info("正在定位{}元素,输入{}内容".format(loc,txt))
self.locator(loc).send_keys(txt)
#点击
def click(self,loc):
try:
#logging.info("正在点击{}元素".format(loc))
log.info("正在点击{}元素".format(loc))
self.locator(loc).click()
exceptExceptionase:
#logging.error('错误日志'%e)
log.error('错误日志'%e)
#窗体最大化
def max(self):
self.driver.maximize_window()

3. Simplemente ejecútelo directamente

seguir optimizando

Baselog.py es una aplicación básica del registro, hay un problema, la consola no tiene salida de registro, solo el archivo de registro tiene

registro basicConfig para optimizar el empaquetado

#对于日志再优化封装


import logging

#创建一个日志器
logger=logging.getLogger()

#设置日志级别
logger.setLevel(logging.INFO)

#指定日志输出的目的地,控制台那要先创建一个控制台
#创建控制台处理器
sh=logging.StreamHandler()
#把日志信息放到控制台里面去
logger.addHandler(sh)

#控制台里面输出的日志信息有些是我们不需要的,有些是我们需要但没有的
#创建格式器
#生成日志信息生成时间文件名日志的状态类名方法名日志内容
fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'
formator=logging.Formatter(fmt)
#优化控制台格式
sh.setFormatter(formator)

#日志信息也要显示再log文件里面
#创建文本处理器,指定日志信息输出到文本处理器
fh=logging.FileHandler('./Log/log.log',encoding='utf-8')
logger.addHandler(fh)
#文本里面的日志格式也可以自己重新定义,这里没有重新定义,直接用上述定义好的格式
fh.setFormatter(formator)

logger.info('日志信息')

resultado de la operación:

Ruta: ../ El directorio actual está dos niveles más arriba

./ Directorio actual hasta un nivel

/ hermano del directorio actual

¿Cómo usar archivos de registro optimizados en el marco?

1. Defina un método loggingtest.py con un valor de retorno en el archivo de registro

#对于日志再优化封装
import logging


def test_logging():
#创建一个日志器
logger=logging.getLogger()

#设置日志级别
logger.setLevel(logging.INFO)

#指定日志输出的目的地,控制台那要先创建一个控制台
#创建控制台处理器
sh=logging.StreamHandler()
#把日志信息放到控制台里面去
logger.addHandler(sh)

#控制台里面输出的日志信息有些是我们不需要的,有些是我们需要但没有的
#创建格式器
#生成日志信息生成时间文件名日志的状态类名方法名日志内容
fmt='%(asctime)s%(filename)s%(levelname)s%(module)s%(funcName)s%(message)s'
formator=logging.Formatter(fmt)
#优化控制台格式
sh.setFormatter(formator)

#日志信息也要显示再log文件里面
#创建文本处理器,指定日志信息输出到文本处理器
fh=logging.FileHandler('./Log/log.log',encoding='utf-8')
logger.addHandler(fh)
#文本里面的日志格式也可以自己重新定义,这里没有重新定义,直接用上述定义好的格式
fh.setFormatter(formator)

return logger

#logger.info('日志信息')

2. Haga referencia al método basepage.py en la capa inferior del marco (capa del controlador de palabras clave)

La siguiente información permanece sin cambios

4. Se informó un error al iniciar y el inicio de sesión no fue exitoso.

 

selenium.common.exceptions.NoSuchElementException: Mensaje: no existe tal elemento: No se puede localizar el elemento: {"método":"css selector","selector":"[name="/html/body/div[4]/div/ div[2]/formulario/div[3]/botón"]"}

  (Información de la sesión: chrome=92.0.4515.159)

Excepciones comunes. NoSuchElementException: Mensaje: No existe tal elemento: No se puede encontrar el elemento: { "método": "selector css", "selector": "[nombre="/html/cuerpo/div[4]/div/div[2] /formulario /div[3]/botón"]"

(Información de la sesión: chrome=92.0.4515.159)

Si inicia sesión por su cuenta, no podrá iniciar sesión correctamente. El problema más probable es el problema del servidor.

Supongo que te gusta

Origin blog.csdn.net/Lynn1111111/article/details/124860845
Recomendado
Clasificación