1. ログの基本的な使い方
#日志:纪录系统运行的信息,记录系统发生的事件日志文件
#作用:了解系统运行的状态,去定位和分析错误问题
#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信息")
操作結果:
#设置日志级别
logging.basicConfig(level=logging.DEBUG)
操作結果:
フォーマット文字列フィールド:
%(asctime)s ログ イベントが発生した時刻 - 人間が判読できる時刻、例: 2003_07_08 16:47:45,896
%(created)f ログ イベントのイベントタイム スタンプ。これは、その時点で time が呼び出されたときに time() 関数によって返される値です。
%(relativeCreated)d ログ イベントが発生したときの、ログ モジュールの読み込み時間に対する相対的なミリ秒数 (なぜこれが使用されるのかはまだわかりません)
ログ イベント時間の %(msecs)d ミリ秒部分
%(levelname)s ログ レコードのテキスト ログ レベル ('DEBUG'、'INFO'、'WARNING'、'ERROR'、'CRITICAL')
%(name)s によって使用されるロガーの名前。デフォルトでは rootLogger が使用されるため、デフォルトは「root」です。
%(message)s ログ レコードのテキスト コンテンツ。ああ、これは msg % args によって計算されます。
%(pathname)s ロギング関数を呼び出すソース コード ファイルのフル パス
%(filename)s パス名のファイル名部分 (ファイル接尾辞を含む)
%(module)s ファイル名の接尾辞を除く名前の部分
%(lineo)d ロギング関数を呼び出したソース コードの行番号
%(funcName)s ログ関数を呼び出した関数名
#日志:纪录系统运行的信息,记录系统发生的事件日志文件
#作用:了解系统运行的状态,去定位和分析错误问题
#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信息")
操作結果:
ログ情報は log.log ファイルにのみ保存され、コンソールにはログ情報が出力されないため、最適化する必要があります。
2. フレームワークへのログの適用方法
まず簡単な自動ログイン フレームワークを作成します
Login_page.py はログイン操作を実装します。
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)
写真が示すように:
Base_page.py はキーワード駆動型ログインを実装します。
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()
このログイン フレームワークにログを追加する方法
入力操作やクリック操作などをログファイルに追加します。
ロギングクラスを呼び出す
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()
実行結果:パスワード表示エラー
フレームワークにログインする場所、フレームワークの下部、キーワード駆動、ログイン メソッド、エラー ログのキャプチャを除いて正しいメソッドです。
3. ログモジュールの最適化
1. パッケージ化されたメソッドとしてログを個別に書き込む
メソッドには戻り値があることに注意してください。
2. キーワード駆動ファイルはログ ファイルを呼び出す必要があります。
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. 直接実行するだけです
最適化を続ける
Baselog.py はログの基本的なアプリケーションですが、問題があります。コンソールにはログ出力がなく、ログ ファイルのみが表示されます。
パッケージングを最適化するためのbasicConfigログ
#对于日志再优化封装
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('日志信息')
操作結果:
パス: ../ 現在のディレクトリは 2 レベル上です
./ 1 つ上のレベルの現在のディレクトリ
/現在のディレクトリの兄弟
フレームワークで最適化されたログ ファイルを使用するにはどうすればよいですか?
1. ログファイルに戻り値を含むメソッドloggingtest.pyを定義します。
#对于日志再优化封装
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. フレームワークの最下層(キーワードドライバー層)にあるメソッドbasepage.pyを参照します。
以下の情報は変更ありません
4.起動時にエラーが報告され、ログインに失敗しました。
selenium.common.Exceptions.NoSuchElementException: メッセージ: そのような要素はありません: 要素が見つかりません: {"method":"css selector","selector":"[name="/html/body/div[4]/div/) div[2]/フォーム/div[3]/ボタン"]"}
(セッション情報: chrome=92.0.4515.159)
一般的な例外。NoSuchElementException: メッセージ: そのような要素はありません: 要素が見つかりません: { "method": "css selector", "selector": "[name="/html/body/div[4]/div/div[2] /form) /div[3]/ボタン"]"
(セッション情報: chrome=92.0.4515.159)