首页 > 其他分享 >UI自动化,关键数据记录

UI自动化,关键数据记录

时间:2023-04-16 23:44:28浏览次数:41  
标签:logger 记录 self driver source UI 自动化 日志 page

  • 关键数据记录的作用
内容 作用
执行日志

1. 记录代码的执行记录,方便复现场景

2. 可以作为bug依据

截图

1. 断言失败或成功截图

2. 异常截图达到丰富报告的作用

3. 可以作为bug依据

page source 协助排查报错时元素当时是否存在页面上

执行日志

  • 日志配置
  • 脚本日志级别
    • debug记录步骤信息
    • info记录关键信息,比如断言等
 1 # 日志配置
 2 import logging
 3 # 创建logger实例
 4 logger = logging.getLogger('simple_example')
 5 # 设置日志级别
 6 logger.setLevel(logging.DEBUG)
 7 # 流处理器
 8 ch = logging.StreamHandler()
 9 ch.setLevel(logging.DEBUG)
10 # 日志打印格式
11 formatter = logging.Formatter\
12 ('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
13 # 添加格式配置
14 ch.setFormatter(formatter)
15 # 添加日志配置
16 logger.addHandler(ch)
日志配置
 1 # 日志与脚本结合
 2 class TestDataRecord:
 3     def setup_class(self):
 4         self.driver = webdriver.Chrome()
 5         self.driver.implicitly_wait(5)
 6     
 7     def teardown_class(self):
 8         self.driver.quit()
 9 
10     def test_log_data_record(self):
11         # 实例化self.driver
12         search_content = "测试开发"
13         # 打开搜狗首页
14         self.driver.get("https://www.sogou.com/")
15         logger.debug("打开搜狗首页")
16         # 输入测试开发
17         self.driver.find_element(By.CSS_SELECTOR, "#query").\
18         send_keys(search_content)
19         # 步骤级别是使用 debug
20         logger.debug(f"搜索的内容为{search_content}")
21         # 点击搜索
22         self.driver.find_element(By.CSS_SELECTOR, "#stb").click()
23         # 搜索结果
24         search_res = self.driver.find_element(By.CSS_SELECTOR, "em")
25         logger.info(f"搜索结果为{search_res.text},预期结果为{search_content}")
26         assert search_res.text == search_content    
日志与脚本结合

执行的截图

  • save_screenshot(截图路径+名称)
  • 记录关键页面
    • 断言页面
    • 重要的业务场景页面
    • 容易出错的页面
1 # 调用save方法截图并保存保存在当前路径下的images文件夹下
2 driver.save_screenshot('./images/search00.png')
调用save方法截图

page source(页面源代码)

  • 在调试过程中,如果有找不到元素的错误可以保存当时的page_source调试代码

最好是保存在文件里,更好查看

# 在报错行前面添加保存page_source的操作
with open("record.html", "w", encoding="u8") as f:
    f.write(self.driver.page_source)
保存page_source

封装异常数据记录

 1 import os.path
 2 import time
 3 import allure
 4 from selenium.webdriver.support import expected_conditions
 5 
 6 from utils.log_utils import logger
 7 
 8 def ui_exception_record(func):
 9     def inner(*args, **kwargs):
10         driver = args[0].driver
11         try:
12             # 被装饰的函数执行过程中,如果出现异常就捕获,并且完成数据记录操作
13             return func(*args, **kwargs)
14         except Exception:
15             # 如果查找元素时抛出异常,则截图/日志/pagesource
16             # 截图记录,双重保障
17             logger.warning("查找元素出现异常")
18             timestamp = int(time.time())
19             # 注意:!! 一定要提前创建好images 路径
20             image_path = f"./data/image_data/image_{timestamp}.PNG"
21             page_source_path = f"./data/page_source_data/page_source_{timestamp}.html"
22             driver.save_screenshot(image_path)
23             with open(page_source_path, "w", encoding="u8") as f:
24                 f.write(driver.page_source)
25                 # 涉及报告信息,所以使用命令行执行才能看到报告效果
26             allure.attach.file(image_path, name="picture",
27                                attachment_type=allure.attachment_type.PNG)
28             # allure.attach.file(page_source_path, name="page_source",
29             #                    attachment_type=allure.attachment_type.HTML)
30             # 如果想看的是转换页面前的html 源码,那么需要使用text 格式
31             allure.attach.file(page_source_path, name="page_source",
32                                attachment_type=allure.attachment_type.TEXT)
33             raise Exception
34     return inner
封装异常数据记录

 

笔记2023-04-15

标签:logger,记录,self,driver,source,UI,自动化,日志,page
From: https://www.cnblogs.com/yuntimer/p/17321142.html

相关文章

  • jquery ui datepicker使用
    $("#regDate").datepicker({showMonthAfterYear:true,//月在年之后显示changeMonth:true,//允许选择月份changeYear:true,//允许选择年份dateFormat:'yy-mm-dd',//设置日期格式closeText:'关闭......
  • 在Vue中,关于require与required
    在Vue里面,是用require还是required?始终拿捏不定,所以这里记录一下图片是require('@/xxx')props里面是required表单验证里面是required总结:只有图片是require,其它都是required......
  • kubebuilder开发kubernetes operator demo
    环境准备go环境配置wgethttps://golang.google.cn/dl/go1.19.8.linux-amd64.tar.gztarzxvfgo1.19.8.linux-amd64.tar.gzmvgo/usr/local/vim/etc/profile在最结尾添加exportHOME=/rootexportGOROOT=/usr/local/goexportGOPATH=/opt/idcus/goexportPATH=$PATH:......
  • 尝试在window系统下,实现连接appuim+ios环境搭配
    弄这个之前,基本全网都是用mac来完成ios的环境搭配,确实ios设备这个需要在MAC设备下,去跑一个WDA的包。我只是不信,最后没法,还是要在window下搞个虚拟机来装MAC。。。以下是MAC弄好之后,需要安装的环境。Mac终端命令运行:一、下载brew:(用腾讯源的)/bin/zsh-c"$(curl-fsSLhttps:......
  • 论文阅读记录1——Lmbff(更好的基于微调的语言模型)读后归纳
    方法:基于GPT-3的强大功能:只要给出一个自然语言提示和一些任务演示,GPT-3就能够做出准确的预测,而无需更新其底层局域网的任何权重。在一个更实际的场景中研究了少数镜头学习,在那里我们使用了更小的语言模型,其中的微调在计算上是有效的。我们提出了lm-bff(更好的语言模型的少量......
  • Qt5.9 UI设计(三)——添加UI、类及资源文件
    前言设计一个软件,最简单的方式就是把控件直接往UI上放,然后再把功能实现了。这样可以实现基本的功能,但是界面不能缩放,如果拖动软件改变界面的大小,界面上的控件就会乱成一团,或者是界面的控件压根就不会跟着界面的大小进行改变。要使界面上的所有控件都随着界面的变化而变化,做到自......
  • Qt5.9 UI设计(四)——布局设计及自定义界面
    前言前面我们已经创建了mainwindowControlTabWidgetControlTreeWidgetmaintitlebar4个UI几面,我们需要将其他三个UI放置到mainwindow显示,同时需要它们可以自适应的界面的大小缩放。这里会使用到水平布局和垂直布局方法。(一)主界面布局设计放置一个空的widget将mainwi......
  • Qt5.9 UI设计(五)——将Tabwidget与treeWidget相互关联
    前言前面一章介绍了ControlTabWidgetControlTreeWidgetmaintitlebar三个子页面同时布局到mainwindow的方法,本章介绍如何将ControlTreeWidget与ControlTabWidget联动。(一)TabWidget子页面实现在maincontent目录下创建otaparatarnsmittelnettester五个目录,用来......
  • Qt5.9 UI设计(六)——TitleBar功能实现
    前言上一章介绍了ControlTreeWidget与ControlTabWidget联动的功能,这一章我们将实现自定义TitleBar的功能操作步骤修改按键图标最大和最小值右键按键图标,转到对应的槽函数中去对应的槽函数的实现如下:voidMainTitleBar::on_pushButtonMin_clicked(){if(pa......
  • Qt5.9 UI设计(七)——统一样式设计
    前言前面已经将UI设计部分实现,各页面也做了最简单的设计,本章介绍一下qss样式的使用。样式设计最终的显示效果如下图:操作步骤将stylesheet.qss样式文件添加进工程stylesheet.qss内容如下:/**********************MainWindowStyleSheet*******************/QMainWind......