字节十年工程师整理的RobotFramework自动化测试框架介绍及应用

2023-10-31

目录

一、概念

二、特性

三、RF环境安装

四、RF的使用

五、RF的常用类库

六、RF的常用关键字的使用

七、准备UI自动化测试的环境

八、浏览器操作的关键字

九、元素定位

十、项目的三层架构

十一、RF非GUI方式(命令行)运行与Jenkins集成


一、概念

RobotFramework是什么?

Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发(ATDD)。

二、特性

1.测试用例使用文本文件(TXT或者TSV文件)保存,使用制表符分隔数据。可以方便的使用任何文本编辑器,或者EXCEL编辑测试用例。也可以使用HTML格式创建用例。

2.测试用例中支持变量使用,可以使用IF语句和FOR循环语句。

3.可以利用“标签”功能对测试用例进行分类和有选择执行。

4.支持关键字驱动、数据驱动和行为驱动。

5.利用已有的关键字,测试人员可以创建自己需要的关键字,形成更高级别的行为。

6.测试执行报告和日志是HTML格式,容易阅读。

7.Robot Framework并不是一款像QTP一样的自动化测试工具。它是一个自动化测试框架,或者说是一个自动化测试平台。

8.提供了测试执行事件的监听接口,并且可以自定义接口中的脚本。例如,某个用例执行前,“start_test”接口中的脚本就会被执行;用例执行结束后,“end_test”接口中的脚本就会被执行。而测试人员可以自定义“start_test”、“end_test”这两个接口的脚本。

9.提供了命令行接口和XML格式的输出。可以与版本管理工具结合,进行持续集成。

10.Robot Framework是通过测试库识别被测对象、操纵被测对象,有很多自带的或者第三方的开源测试库。例如,使用“selenium2Library”库测试web客户端。此外还可以测试java客户端、Win32客户端、SSH协议的字符终端等。

11.测试人员可以使用Python和java创建自己需要的测试库。

12.提供了远程测试执行接口,可以进行分布式测试执行。

以上内容来源百度百科

三、RF环境安装

环境的安装需要版本匹配,我现在电脑上配置的版本亲测有效。

1、安装python3.7.6环境并配置环境变量;

2、使用管理员身份打开dos窗口:

安装robotframework:pip install robotframework==4.1

卸载为pip uninstall robotframework

3、在dos窗口中安装RIDE工具,RIDE是robotframework的开发工具:

安装RIDE:pip install robotframework-ride==1.7.4.1

卸载:pip uninstall robotframework-ride

安装时会弹出如下的对话框,是否创建桌面快捷方式?,点击“是”。

4、安装wxPython

Wxpython 是python 非常有名的一个GUI库,因为RIDE 是基于这个库开发的,所以这个必须安装。

pip install wxPython==4.0.4

5、Selenium2Library安装

RF-seleniumlibrary 可以看做RF版的selenium 库,selenium (webdriver)可以认为是一套基于web的规范(API),所以,RF 、appium 等测试工具都可以基于这套API进行页面的定位与操作。

pip install robotframework-selenium2library

6、双击图标打开,或者在dos窗口输入ride.py打开,打开之后如下图所示。

安装过程中遇到的问题

遇到闪退或者启动报错如下所示:

将..python37\Lib\site-packages\robotide\application的目录下application.py文件中的self._initial_locale = wx.Locale(wx.LANGUAGE_ARABIC)改成self._initial_locale = wx.Locale(wx.LANGUAGE_ENGLISH)

如遇其他问题,请求助热心网友们,大部分问题都可以解决。

四、RF的使用

1、新建项目

点击【File】→【New Project】,在弹出框中填写项目名称、路径、类型(文件或者文件夹),这里新建一个文件夹。

2、创建测试套件

在文件夹上点击右键,选择【New Suite】,在弹出框中填写测试套件的名称,类型选择File。

3、创建测试用例

在测试套件上点击右键,选择【New Test Case】,在弹出框中填写测试用例的名称。

4、创建资源文件

在文件夹上点击右键,选择【New Resource】,在弹出框中填写名称,并选择格式为TXT。一般为保存业务关键字资源,是自定义关键字的载体,在资源文件下可以创建用户自定义关键字。

5、页面操作介绍

【1】 测试套件的Edit页签页面,如下图所示

 1、Settings设置

2、Import:导入外部文件

Library:导入外部类库,如果是黑色表示成功,红色表示失败。

Resource:导入资源文件,比如可以导入业务关键字。

3、定义内部变量

添加变量、添加list集合,添加一个字典,这一块相对用的不多,较常用的还是导入外部文件的Library和Resource功能。

4、元数据

【2】测试用例页面

五、RF的常用类库

1、标准库:不需要安装,直接用,RF自带。

Buitini(测试库)

Collections(集合库)

DateTime(时间库)

ScreenShot(截屏库)

标准库的位置:D:\software\python37\Lib\site-packages\robot\libraries

2、扩展库:需要通过pip安装库

Web自动化测试:SeleniumLibrary,Selenium2Library,Selenium2Library for java等。

API接口自动化:RequestsLibrary

APP自动化测试:AppiumLibrary

安装方式:

pip install robotframework-seleniumlibrary

pip install robotframework-requests

pip install robotframework-appiumlibrary

扩展库的位置:D:\software\python37\Lib\site-packages\

注意:在导包时一定要和文件夹的名字一致,包括大小写。

六、RF的常用关键字的使用

快捷键:

1、搜索关键字:F5

2、自动补全关键字:ctrl+shift+空格

当我们遇到不熟悉的关键字时,可以在如下所示的页面中查找其使用方法。

小试牛刀

Comment	1.打印									
Log	这是一条打印语句									
Comment	2.设置变量									
${a}	Set Variable	100								
Log	${a}									
Comment	3.获取系统时间									
${times}	Get Time									
Log	${times}									
Comment	4.睡眠时间,强制等待									
sleep	3									
Comment	5.字符串的拼接									
${str}	Catenate	oracle	mysql	sqlserver						
Log	${str}									
Comment	6.创建列表									
${list1}	Create List	功能测试	自动化测试	性能测试						
Log	${list1}									
@{list2}	Create List	功能测试	自动化测试	性能测试						
Log Many	@{list2}									
Comment	7.创建字典									
${dic}	Create Dictionary	name=张三	age=18							
Log	${dic}									
Comment	7.1 获得字典的键									
${keys}	Get Dictionary Keys	${dic}								
Log	${keys}									
Comment	7.2 获得字典的值									
${values}	Get Dictionary Values	${dic}								
Log	${values}									
Comment	7.3 通过键取值									
${key_value}	Get From Dictionary	${dic}	name							
Log	${key_value}									
Comment	8.执行python里面的方法									
${random_number}	Evaluate	random.randint(1,101)	modules=random							
Log	${random_number}									
${times}	Evaluate	time.time()	modules=time							
Log	${times}									
Comment	9.执行python自定义的方法									
Import Library	E:/pythonProject/test.py									
${a}	Evaluate	int(10)								
${b}	Evaluate	int(20)								
${return_result}	sum	${a}	${b}							
Log	${return_result}									
Comment	10. 流程控制IF									
${age}	Set Variable	22								
Run Keyword If	${age}>30	Log	年龄太大,不合适	ELSE IF	18<=${age}<=30	Log	年龄正合适	ELSE	Log	未成年
Comment	11. 流程控制FOR									
FOR	${a}	IN	oracle	mysql	sqlserver					
	Log	${a}								
END										
Comment	流程控制FOR的另一种形态									
@{list3}	Create List	oracle	mysql	sqlserver						
FOR	${a}	IN	@{list3}							
	Log	${a}								
END										
Comment	流程控制FOR循环范围内的数据									
FOR	${a}	IN RANGE	1	11						
	Run Keyword If	${a}==5	Exit For Loop							
	Log	${a}								
END										
										
复制代码

以上代码的运行结果:

Starting test: TestDemo.RF测试1.TestSuit1.TestCase1
20210831 08:28:34.827 :  INFO : 这是一条打印语句
20210831 08:28:34.828 :  INFO : ${a} = 100
20210831 08:28:34.828 :  INFO : 100
20210831 08:28:34.829 :  INFO : ${times} = 2021-08-31 08:28:34
20210831 08:28:34.830 :  INFO : 2021-08-31 08:28:34
20210831 08:28:37.837 :  INFO : Slept 3 seconds
20210831 08:28:37.839 :  INFO : ${str} = oracle mysql sqlserver
20210831 08:28:37.839 :  INFO : oracle mysql sqlserver
20210831 08:28:37.840 :  INFO : ${list1} = ['功能测试', '自动化测试', '性能测试']
20210831 08:28:37.840 :  INFO : ['功能测试', '自动化测试', '性能测试']
20210831 08:28:37.841 :  INFO : @{list2} = [ 功能测试 | 自动化测试 | 性能测试 ]
20210831 08:28:37.841 :  INFO : 功能测试
20210831 08:28:37.841 :  INFO : 自动化测试
20210831 08:28:37.841 :  INFO : 性能测试
20210831 08:28:37.842 :  INFO : ${dic} = {'name': '张三', 'age': '18'}
20210831 08:28:37.843 :  INFO : {'name': '张三', 'age': '18'}
20210831 08:28:37.844 :  INFO : ${keys} = ['age', 'name']
20210831 08:28:37.844 :  INFO : ['age', 'name']
20210831 08:28:37.845 :  INFO : ${values} = ['18', '张三']
20210831 08:28:37.846 :  INFO : ['18', '张三']
20210831 08:28:37.847 :  INFO : ${key_value} = 张三
20210831 08:28:37.847 :  INFO : 张三
20210831 08:28:37.848 :  INFO : ${random_number} = 101
20210831 08:28:37.848 :  INFO : 101
20210831 08:28:37.849 :  INFO : ${times} = 1630369717.848543
20210831 08:28:37.849 :  INFO : 1630369717.848543
20210831 08:28:37.859 :  INFO : ${a} = 10
20210831 08:28:37.860 :  INFO : ${b} = 20
20210831 08:28:37.860 :  INFO : ${return_result} = 30
20210831 08:28:37.861 :  INFO : 30
20210831 08:28:37.861 :  INFO : ${age} = 22
20210831 08:28:37.862 :  INFO : 年龄正合适
20210831 08:28:37.863 :  INFO : oracle
20210831 08:28:37.864 :  INFO : mysql
20210831 08:28:37.865 :  INFO : sqlserver
20210831 08:28:37.866 :  INFO : @{list3} = [ oracle | mysql | sqlserver ]
20210831 08:28:37.867 :  INFO : oracle
20210831 08:28:37.868 :  INFO : mysql
20210831 08:28:37.869 :  INFO : sqlserver
20210831 08:28:37.871 :  INFO : 1
20210831 08:28:37.872 :  INFO : 2
20210831 08:28:37.873 :  INFO : 3
20210831 08:28:37.875 :  INFO : 4
20210831 08:28:37.876 :  INFO : Exiting for loop altogether.
Ending test:   TestDemo.RF测试1.TestSuit1.TestCase1
复制代码

七、准备UI自动化测试的环境

1、通过 pip安装扩展库:pip install robotframework-seleniumlibrary;

2、下载谷歌浏览器;

3、下载谷歌浏览器的驱动(注意:谷歌浏览器的驱动必须和谷歌浏览器兼容),然后将chromedriver.exe放到python目录下;

4、在RF的测试套件里面导入SeleniumLibrary;

八、浏览器操作的关键字

Comment	打开浏览器		
Open Browser	https://www.baidu.com	chrome	
Comment	隐式等待		
Set Browser Implicit Wait	5		
sleep	2		
Comment	浏览器放大		
Maximize Browser Window			
sleep	2		
Comment	设置浏览器的尺寸		
Set Window Size	1024	768	
sleep	2		
${width}	${height}	Get Window Size	
sleep	2		
Comment	返回上一步		
Go Back			
sleep	2		
Comment	直接跳转页面		
Go To	https://www.baidu.com		
Comment	刷新页面		
Reload Page			
sleep	2		
Comment	获取title		
${title}	Get Title		
Log	${title}		
sleep	2		
Comment	获取路径		
${loc}	Get Location		
Log	${loc}		
sleep	2		
Comment	关闭浏览器		
Close Browser			
复制代码

九、元素定位

元素定位的八种方式:id,name,link_text,partial_link_text,xpath,css,class_name,tag_name

前提:元素必须唯一

以下是通过id、name、link定位的几种简单方式

除了以上的定位方式,还有两个比较强大的定位方式:xpath与css

我们现在要定位如下的文本框:

xpath:(以下定位的元素都为百度首页的部分元素)

1.通过绝对路径定位,这种方式几乎不用。

2.通过相对路径定位://form/span/input

 3.通过元素属性定位://input[@autocomplete="off"]或者//input[@autocomplete="off" and @class="s_ipt"]

4.通过部分属性定位://input[starts-with(@autocomplete,"of")]或者//input[contains(@autocomplete,"of")]

5.通过文本定位//a[text()="新闻"]

css:(以下定位的元素都为百度首页的部分元素)

1.通过绝对路径定位,这种方式几乎不用。

2.通过ID或者Class定位:#ID或者.class

3.通过元素属性定位:

一个属性定位 :input[autocomplete="off"]

两个属性同时定位:input[autocomplete="off"][class="s_ipt"]

4.通过部分属性定位:

以什么开头:input[autocomplete^="of")]

以什么结尾:input[autocomplete$="ff")]

包含:input[autocomplete*="of")]

5.通过子元素定位div#s-top-left a:nth-child(3),id为s-top-left下的第三个a标签。

如何处理frame框架?

我们在实际项目中,会发现很多情况下都存在frame框架,而处在frame框架中的元素,不能直接定位,需要先跳进当前的frame中,再进行定位。

跳进上图中的frame框架中:Select Frame menu-frame

 如果要定位不是该frame中的元素,则需要先跳出当前frame,再进行操作:Unselect Frame,如下图所示:

 下拉框列表的定位方式:

 下面以Select From List By Value为例:

 定位一组相同元素中的其中一个:

处理警告框

弹框一般有三种:alert,confirm,prompt

处理上图中的alert弹框,关键词为Handle Alert,如果点击确定操作,不用传任何参数,如果点击取消按钮,则传值为:DISMISS.

十、项目的三层架构

1、三层架构指的是什么?

(1)页面元素层

(2)业务逻辑层

(3)测试用例层

业务逻辑层调用页面元素层,测试用例层调用业务逻辑层。

2、为什么要分层,意义在哪里?

实现页面元素,公共方法,公共数据,业务逻辑,测试用例集中式管理。

增加脚本的重复利用率。

增加脚本的可维护性。

十一、RF非GUI方式(命令行)运行与Jenkins集成

命令:pybot -d 测试报告的路径 测试用例的路径

Jenkins的基本操作

1、安装Jenkins的环境

(1)安装jdk环境;

(2)进入Jenkins官网,下载安装文件,双击进行安装,按照步骤进行即可;

2、Jenkins的配置

(1)在插件管理中搜索Robot Framework,进行安装。

 (2)创建一个自由风格的项目

 (3)设置定时执行任务

 (4)创建一个Windows批处理命令

 (5)添加Execute Groovy script System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

 (6)增加构建后操作步骤

 

B站最牛的Python自动化测试框架全栈测试开发实战项目入门到精通,涨薪必备教程!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字节十年工程师整理的RobotFramework自动化测试框架介绍及应用 的相关文章

  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 测试用例评审流程优化

    测试用例 评审是QA日常工作流程中的关键一环 是QA同学完善测试用例 交流测试经验的好机会 负责组内测试用例建设以来 作者对于评审流程做了一些优化工作 本文作者将整个优化过程中的心得体会做了一个总结 希望能给大家带来帮助 01 原始流程 1
  • 软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库 用于数据验证和解析 特别是用于处理 JSON 数据 它的主要目标是使数据验证和解析变得简单 直观和可维护 本文将介绍 Pydantic 的基础知识 包括如何定义模型 验证数据以及处理错
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • tcpdump抓包

    tcpdump抓包 基本概念 1 类型的关键字 host 指明一台主机 如 host 10 1 110 110 net 指明一个网络地址 如 net 10 1 0 0 port 指明端口号 如 port 8090 2 确定方向的关键字 sr
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • Web自动化测试 —— capability参数配置

    一 capability概述 capability是webdriver支持的标准命令之外的扩展命令 配置信息 配置web驱动属性 如浏览器名称 浏览器平台 结合selenium gird完成分布式 兼容性测试 官网地址 https www
  • 一文从0到1手把手教学UI自动化测试之数据驱动!

    在UI的自动化测试中 我们需要把测试使用到的数据分离到文件中 如果单纯的写在我们的测试模块里面 不是一个好的设计 所以不管是什么类型的自动化测试 都是需要把数据分离出来的 当然分离到具体的文件里面 文件的形式其实有很多的 这里主要说明JSO

随机推荐

  • MySQL列的默认值(default)的研究

    文章目录 写作背景 版本说明 官方文档中的说明 显式默认值 隐式默认值 数据类型的默认值 sql mode与strict mode 查看sql mode 设置sql mode 测试 总结 文章开始之前先思考一下 假设MySQL中有一张如下的
  • java的执行顺序

    1 讲解用到的代码 public class Fu static int a 3 static System out println a System out println 父类静态代码块被执行 public Fu System out
  • java冒泡排序_使用Java数组实现冒泡排序法

    大数据和人工智能交流 头条号向广大初学者新增C Java Python Scala javascript 等目前流行的计算机 大数据编程语言 希望大家以后关注本头条号更多的内容 冒泡排序算法详解 一 算法的设计思想 就是将第一个记录的关键字
  • mapperscan扫描多个包_SpringBoot和Mybatis配置多数据源连接多个数据库

    SpringBoot和Mybatis配置多数据源连接多个数据库 目前业界操作数据库的框架一般是 Mybatis 但在很多业务场景下 我们需要在一个工程里配置多个数据源来实现业务逻辑 在SpringBoot中也可以实现多数据源并配合Mybat
  • Android Log日志系统

    目录 0 前言 1 Native的Log写过程解析 2 Socket的另一端Logd 0 前言 Android中 logd 详解 私房菜的博客 CSDN博客 logd 里面讲了Java层Logd的框架和代码和Native的一些代码 1 Na
  • 小程序如何实现即时通信?几个方法可参考

    小程序可以通过以下方式实现即时通信 WebSocket 小程序可以使用WebSocket协议与服务器进行实时通信 WebSocket是一种基于TCP协议的全双工通信协议 可以实现服务器主动向客户端推送消息 实时数据库 小程序可以使用实时数据
  • openEuler 华为欧拉系统搭建本地yum和内网yum源

    操作系统版本 openEuler 22 03 LTS 完整版本系统镜像下载地址 https repo openeuler org openEuler 22 03 LTS ISO x86 64 openEuler 22 03 LTS ever
  • mybatis plus 报错 Invalid bound statement (not found)

    报错提示 Invalid bound statement not found 原因 使用mybatis plus时不能使用自带的SqlSessionFactory 要使用MybatisSqlSessionFactory MybatisSql
  • select下拉框option的样式修改

    select原样式 进行样式修改后的样式 附上修改代码 select外面必须包裹一个div 用来覆盖select原有的样式 div class option div
  • Qt Creator实用快捷键

    Qt Creator 实用快捷键 Qt Creator实用快捷键 快捷键 功能 在头文件函数声明处按Alt Enter 在对应的CPP文件中 生成函数的实现
  • jeeplus多商户商城,分销商城

    ZSCAT springcloud 多商户商城 下载 https gitee com catshen zscat sw pc h5 小程序 app uniapp集成 分销商城 积分商城 不用写xml配置 独特的日志记录方式 包含用户角色 权
  • 刷题日志

    1 两数之和 基于数组的散列 给定一个整数组nums和一个目标值target 请你在该数组中找出和目标之中那两个整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 示例 给定 nums 2 7
  • 【蓝桥杯历年真题合集】蓝桥杯2022初赛

    个人主页 程序猿追 系列专栏 算法合集 目前状态 创建Java学习之路 零基础到就业实战 系列 目前更新到JAVAWEB开发 作者简介 大家好 我是程序猿追 全栈领域新星创作者 算法爱好者 常在作者周榜排名前30 某不知名的 ACMer 推
  • TCP封装

    大家好呀 我是请假君 今天又来和大家一起学习数通了 今天要分享的知识是TCP的封装 TCP段的头格式如上图所示 其协议头最少20个字节 其中主要字段如下 1 源端口 Source Port 16位的源端口字段包含初始化通信的端口号 源端口和
  • 如何用Python欢度六一?

    今天是六一儿童节 虽然秃头程序员没有头发 但是童心还是一直都在的 给大家分享一个私藏的GitHub项目 free python games 一行代码就能进入使用Python开发的小游戏快乐玩耍 安装与使用 安装当然也很简单一行代码就可以 由
  • 剑指 Offer 14- I. 剪绳子&&剑指 Offer 14- II. 剪绳子 II(动态规划+贪心算法)

    剑指 Offer 14 I 剪绳子 题目描述 剑指Offer 66 剪绳子 给你一根长度为 n 的绳子 请把绳子剪成整数长度的 m 段 m n都是整数 n gt 1并且m gt 1 每段绳子的长度记为 k 0 k 1 k m 1 请问 k
  • 哈夫曼树(Huffman Tree)学习总结

    定义 将所要编码的字符作为叶子结点的树为哈夫曼树 作用 解决编码问题 模板 priority queue
  • UmiJS实战

    一 配置项 hash 配置是否让生成的文件包含 hash 后缀 通常用于增量发布和避免浏览器加载缓存 hash true base 设置路由前缀 通常用于部署到非根目录 base dengta publicPath 打包的时候 webpac
  • CVPR2023

    欢迎关注 CVHub 官方微信公众号 Title Efficient Semantic Segmentation by Altering Resolutions for Compressed Videos PDF https arxiv o
  • 字节十年工程师整理的RobotFramework自动化测试框架介绍及应用

    目录 一 概念 二 特性 三 RF环境安装 四 RF的使用 五 RF的常用类库 六 RF的常用关键字的使用 七 准备UI自动化测试的环境 八 浏览器操作的关键字 九 元素定位 十 项目的三层架构 十一 RF非GUI方式 命令行 运行与Jen