论你是刚接触 Linux 的文件移动的新手还是已有丰富的经验,你都可以通过此深入的文章中学到一些东西。
-- Seth Kenlon(作者)
在 Linux 中移动文件看似比较简单,但是可用的选项却比大多数人想象的要多。本文介绍了初学者如何在 GUI 和命令行中移动文件,还介绍了底层实际上发生了什么,并介绍了许多有一定经验的用户也很少使用的命令行选项。
在研究移动文件之前,有必要仔细研究移动文件系统对象时实际发生的情况。当文件创建后,会将其分配给一个 索引节点(inode),这是文件系统中用于数据存储的固定点。你可以使用 ls 命令看到文件对应的索引节点:
$ ls --inode example.txt 7344977 example.txt
移动文件时,实际上并没有将数据从一个索引节点移动到另一个索引节点,只是给文件对象分配了新的名称或文件路径而已。实际上,文件在移动时会保留其权限,因为移动文件不会更改或重新创建文件。(LCTT 译注:在不跨卷、分区和存储器时,移动文件是不会重新创建文件的;反之亦然)
文件和目录的索引节点并没有暗示这种继承关系,而是由文件系统本身决定的。索引节点的分配是基于文件创建时的顺序分配的,并且完全独立于你组织计算机文件的方式。一个目录“内”的文件的索引节点号可能比其父目录的索引节点号更低或更高。例如:
$ mkdir foo $ mv example.txt foo $ ls --inode 7476865 foo $ ls --inode foo 7344977 example.txt
但是,将文件从一个硬盘驱动器移动到另一个硬盘驱动器时,索引节点基本上会更改。发生这种情况是因为必须将新数据写入新文件系统。因此,在 Linux 中,移动和重命名文件的操作实际上是相同的操作。无论你将文件移动到另一个目录还是在同一目录使用新名称,这两个操作均由同一个底层程序执行。
本文重点介绍将文件从一个目录移动到另一个目录。
图形用户界面是大多数人都熟悉的友好的抽象层,位于复杂的二进制数据集合之上。这也是在 Linux 桌面上移动文件的首选方法,也是最直观的方法。从一般意义上来说,如果你习惯使用台式机,那么你可能已经知道如何在硬盘驱动器上移动文件。例如,在 GNOME 桌面上,将文件从一个窗口拖放到另一个窗口时的默认操作是移动文件而不是复制文件,因此这可能是该桌面上最直观的操作之一:
Moving a file in GNOME.
而 KDE Plasma 桌面中的 Dolphin 文件管理器默认情况下会提示用户以执行不同的操作。拖动文件时按住 Shift 键可强制执行移动操作:
Moving a file in KDE.
用于在 Linux、BSD、Illumos、Solaris 和 MacOS 上移动文件的 shell 命令是 mv。不言自明,简单的命令 mv <source> <destination> 会将源文件移动到指定的目标,源和目标都由 绝对 或 相对 文件路径定义。如前所述,mv 是 POSIX 用户的常用命令,其有很多不为人知的附加选项,因此,无论你是新手还是有经验的人,本文都会为你带来一些有用的选项。
但是,不是所有 mv 命令都是由同一个人编写的,因此取决于你的操作系统,你可能拥有 GNU mv、BSD mv 或 Sun mv。命令的选项因其实现而异(BSD mv 根本没有长选项),因此请参阅你的 mv 手册页以查看支持的内容,或安装你的首选版本(这是开源的奢侈之处)。
要使用 mv 将文件从一个文件夹移动到另一个文件夹,请记住语法 mv <source> <destination>。 例如,要将文件 example.txt 移到你的 Documents 目录中:
$ touch example.txt $ mv example.txt ~/Documents $ ls ~/Documents example.txt
就像你通过将文件拖放到文件夹图标上来移动文件一样,此命令不会将 Documents 替换为 example.txt。相反,mv 会检测到 Documents 是一个文件夹,并将 example.txt 文件放入其中。
你还可以方便地在移动文件时重命名该文件:
$ touch example.txt $ mv example.txt ~/Documents/foo.txt $ ls ~/Documents foo.txt
这很重要,这使你不用将文件移动到另一个位置,也可以重命名文件,例如:
$ touch example.txt $ mv example.txt foo2.txt $ ls foo2.txt`
不像 cp 命令,mv 命令处理文件和目录没有什么不同,你可以用同样的格式移动目录或文件:
$ touch file.txt $ mkdir foo_directory $ mv file.txt foo_directory $ mv foo_directory ~/Documents
如果你移动一个文件到一个已有同名文件的地方,默认情况下,mv 会用你移动的文件替换目标文件。这种行为被称为 清除(clobbering),有时候这就是你想要的结果,而有时则不是。
一些发行版将 mv 别名定义为 mv --interactive(你也可以 自己写一个 ),这会提醒你确认是否覆盖。而另外一些发行版没有这样做,那么你可以使用 --interactive 或 -i 选项来确保当两个文件有一样的名字而发生冲突时让 mv 请你来确认。
$ mv --interactive example.txt ~/Documents mv: overwrite '~/Documents/example.txt'?
如果你不想手动干预,那么可以使用 --no-clobber 或 -n。该选项会在发生冲突时静默拒绝移动操作。在这个例子当中,一个名为 example.txt 的文件以及存在于 ~/Documents,所以它不会如命令要求从当前目录移走。
$ mv --no-clobber example.txt ~/Documents $ ls example.txt
如果你使用 GNU mv,有一个备份选项提供了另外一种安全移动的方式。要为任何冲突的目标文件创建备份文件,可以使用 -b 选项。
$ mv -b example.txt ~/Documents $ ls ~/Documents example.txt example.txt~
这个选项可以确保 mv 完成移动操作,但是也会保护目录位置的已有文件。
另外的 GNU 备份选项是 --backup,它带有一个定义了备份文件如何命名的参数。
简单来说:
$ mv --backup=numbered example.txt ~/Documents $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~
可以使用环境变量 VERSION_CONTROL 设置默认的备份方案。你可以在 ~/.bashrc 文件中设置该环境变量,也可以在命令前动态设置:
$ VERSION_CONTROL=numbered mv --backup example.txt ~/Documents $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~ -rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~
--backup 选项仍然遵循 --interactive 或 -i 选项,因此即使它在执行备份之前创建了备份,它仍会提示你覆盖目标文件:
$ mv --backup=numbered example.txt ~/Documents mv: overwrite '~/Documents/example.txt'? y $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:24 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~ -rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~ -rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt.~3~
你可以使用 --force 或 -f 选项覆盖 -i。
$ mv --backup=numbered --force example.txt ~/Documents $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:26 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~ -rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~ -rw-rw-r--. 1 seth users 128 Aug 1 17:24 example.txt.~3~ -rw-rw-r--. 1 seth users 128 Aug 1 17:25 example.txt.~4~
--backup 选项在 BSD mv 中不可用。
移动多个文件时,mv 会将最终目录视为目标:
$ mv foo bar baz ~/Documents $ ls ~/Documents foo bar baz
如果最后一个项目不是目录,则 mv 返回错误:
$ mv foo bar baz mv: target 'baz' is not a directory
GNU mv 的语法相当灵活。如果无法把目标目录作为提供给 mv 命令的最终参数,请使用 --target-directory 或 -t 选项:
$ mv --target-directory=~/Documents foo bar baz $ ls ~/Documents foo bar baz
当从某些其他命令的输出构造 mv 命令时(例如 find 命令、xargs 或 GNU Parallel ),这特别有用。
使用 GNU mv,你可以根据要移动的文件是否比要替换的目标文件新来定义移动动作。该方式可以通过 --update 或 -u 选项使用,在BSD mv 中不可用:
$ ls -l ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:32 example.txt $ ls -l -rw-rw-r--. 1 seth users 128 Aug 1 17:42 example.txt $ mv --update example.txt ~/Documents $ ls -l ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:42 example.txt $ ls -l
此结果仅基于文件的修改时间,而不是两个文件的差异,因此请谨慎使用。只需使用 touch 命令即可愚弄 mv:
$ cat example.txt one $ cat ~/Documents/example.txt one two $ touch example.txt $ mv --update example.txt ~/Documents $ cat ~/Documents/example.txt one
显然,这不是最智能的更新功能,但是它提供了防止覆盖最新数据的基本保护。
除了 mv 命令以外,还有更多的移动数据的方法,但是作为这项任务的默认程序,mv 是一个很好的通用选择。现在你知道了有哪些可以使用的选项,可以比以前更智能地使用 mv 了。
via: https://opensource.com/article/19/8/moving-files-linux-depth
作者: Seth Kenlon 选题: lujun9972 译者: wxy 校对: wxy
本文由 LCTT 原创编译, Linux中国 荣誉推出
HTML:htper text markup language超文本标记(标签)语言
由各种标签组成,用来制作网页,告诉浏览器如何显示页面
w3c:world wide web consortium万维网联盟,制定web技术相关标准和规范的组织,HTML技术hi由w3c制定的标准
两个版本:HTML4.0.1、HTML5.0-----通常H5
官网:http://www.W3shcool.com.cn
HTML文档是以.html或.htm结尾
记事本notepad、sublime、Notepad++、Dreamweaver、VScode、Webstorm等
使用步骤:
使用技巧:
常见的浏览器:IE浏览器微软、chrome谷歌浏览器、fifirefox火狐、safari苹果
浏览器的作用是读取html文件,并以网页的形式来显示
浏览器不会直接显示html标签,而是使用标签来解释网页的内容
一个完整的html标签的组成:
<标签名 属性名="属性值">内容</标签名>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>标签</title>
</head>
<body bgcolor="red" text="blue">
html从入门到精通!
</body>
</html>
12345678910
属性值要用双撇号括起来,一般用双引号
根据标签是否关闭,分为,关闭型和非关闭型
<html></html>
<head></head>
<title></title>
非关闭型:没有结束标签
<meta>
<br>
<h1>....<h6>
根据标签是否独占一行,分为块级标签和行级标签
块级标签:显示为块状,独占一行
<h1>大家好</h1>
<hr>
行级标签:在行内显示,可与其他内容在同一行显示
<span></span>
注释在浏览器中不会显示,是用来标注解释html语句,但通过查看源代码的方式可以看到
语法:
<--注释内容-->
也称为特殊字符,用于显示一些特殊符号,如<>&空格等
语法:
<&实体字符的名称>
在html文档的第一行,使用<!DOCTYPE html>
声明HTML文档的类型用来告诉浏览器页面的文档嘞型,用来制定html版本的规范
目前基本上最常用的html5
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
</html>
12345678910
1.基本标签
1.1 有序列表
ol:ordered listli:list item默认使用阿拉伯数字、从1开始标记,可以通过属性进行修改
· type属性:设置列表的符号标记、取值;数字1(默认)、字母(a或A)、罗马数字(i或I) · start属性:设置起始值,值必须是数字
1.2 无序列表
ul:unodered list
li:list item
默认情况下使用实心圆表作为符号标记,可以通过属性进行修改
· type属性:设置列表的符号标记、取值:disc实心圆(默认)、circle空心圆、square正方形、none不 显示项目符号
1.3 定义列表
dl:definition list
dt:definition title
dd:definition description
1.4 水平线标签
hr:horizontal
常用属性:
· color:颜色
两种方式:
颜色名称:如red、green、blue、white、black、pink、orange等
16进制的RGB表示法:Red、Green、Blue用法:#RRGGBB 每种颜色的取值范值0-255,转换为16 进制00-FF
如: #FF0000 红色 #00FF00绿色 #0000FF蓝色 #FFFFFF白色、#CCCCCC #FF7300桔色
· size:粗细,数值
· width宽度
两种写法:
像素:绝对值(固定值)
百分比:相对值,相对于水平线标签所在父容器宽度的百分比
· align对齐
取值:center居中 left right
1.5图像标签
img:image
常见的图片格式:.jpg .png .gif .bmp
常见的属性:
· src:source指定图片的路径(来源),必选叁数
如果图片与html源代码在同一个文件夹中,可以直接在src中写图片名称即可
习惯上,我们会将多个图片与html代码文档分别放在同一个文件夹project中的不同目录下,此时需要 在src中指定图片的路径为相对路径
路径的分类:
· 相对路径
表示: ./当前路径
…/当前位置的上一级文件夹
提示:…/image
· alt:当图片无法显示时显示的提示信息
· title:当鼠标放到图片上时显示的提示信息
· width和 height:设置图片的宽度和高度
默认图片以原始尺寸显示
如果只设置其中一个,则另一个会按比例缩放
如果同时设置宽和高,可能导致图片变形
两种写法:
像素:绝对值(固定值)
百分比:相对值,相对于父容器的尺寸的百分比
2.其他标签
为了更好语义化
3.头部标签
· meta定义网页的摘要信息,如字符编码,关键词,描述,作者等
· title定义网页的标题
· style定义内容css样式
· link引用外部css样式
· script定义或引用脚本
· base定义基础路径
默认以当前页面文件所在的位置为相对路径参照
4.标签嵌套
一个标签中嵌套另外一个标签
标签不能乱嵌套
浏览器渲染后显示的页面代码与编码时有所不同
chrome浏览器提供的开发工具:帮助开发人员查看和调试页面的
如何打开:
· Elements:从浏览器的角度来看页面,浏览器渲染页面时内部的结构
· console:控制台,显示各种警告和错误信息
· network:查看网络请求信息,浏览器向服务器请求了哪些资源,资源大小,
加载资源所消耗的时间
四、超链接
1.简介
使用超链接可以从一个页面跳转到另外一个页面,实现页面之间导航
当鼠标移动到超链接文本或图片时,鼠标箭头会变成一只小手
超链接有三种类型:
普通链接/页面间的链接,跳转到另一个页面 锚链接:链接到锚点(链接到同一个页面的指定位置) 功能链接:实现特殊功能(发邮件,下载)
2.基本用法
使用 标签来创建超链接
语法格式:
常用属性:
href:链接地址或路径,链接地址
world
链接文本或图片
1 2 3 4 5 1 target:链接打开的位置,取值
路径分类:
绝对路径 以根开始的路径
file:///D:/software/b.html https://www.baidu.com/img/bd_logo1.png
相对路径 相对于当前页面文件所在的路径,不是以根开始的路径 ./ 当前路径 …/ 当前位置上一级目录
3.锚链接
3.1简介
点击链接后跳转到某一个页面的指定位置(锚点anchor)
锚链接的分类:
页面内的锚链接 页面间的锚链接
3.2 页面内的锚链接
步骤:
3.3 页面间的锚链接
4.功能链接
5.URL
5.1 简介
URL:Uniform Resource Locator 统一资源定位器,用来定位资源所在的位置,最常见的就是网址
5.2 组成
一个完整的URL由8个部分组成:
协议:prococol 如 http:超文本传输协议,用来访问WEB网站Hyper text Transfer protocal https:更加安全的协议 SSL安全套接子层 ftp文件传输协议,用来访问服务器上的文件,实现文件的上传和下载File Transfer protocol file:文件协议,用来访问本地文件 主机名hostname服务器地址或服务器Netbios名称,如www.baidu.com ftp://10.255.254.254 端口:port位于主机名的后面,使用冒号进行分隔 不同的协议使用不同的端口,如http使用80端口,https使用的443端口,ftp使用20和21 如果使用的是默认端口,则端口可以省略 如果使用的不是默认端口,则必须指定端口http://59.49.32.213:7070/ 路径:path目标文件所在的路径结构,如:www.baidu.com/img/ 资源resource要访问的目标文件,如bd_logo1.png 查询字符串:query string 也称为参数 在资源后面使用?开头的一组名称/值
链接文本
链接文本
https://www.baidu.com/img/bd_logo1.png?name=tom&age=2&sex=male https://www.w3school.com.cn/html/html_quotation_elements.asp file:///C:/Users/Administrator/Desktop/project/code/09.%E5%B8%B8%E7%94%A8%E6%A0%87%E7%A D%BE3.html http://www.sxgjpx.net/ ftp://10.255.254.253/
1
1
1 2 3
4 5
名称和值之间以=分隔,多个之间用&分隔,如:name=tom&age=2&sex=male 锚点anchor,在资源后面使用#开头的文本,如#6 身份认证authentication,指定身份信息,如:ftp://账户:密码@ftp.bbshh010.com
五、表格
1.简介
表格是一个规则的行列结构,每个表格是由若干行组成,每行由若干个单元格组成
table row column
2.基本结构
2.1 table标签
用来定义表格
常用属性:
border:表格边框 默认为0 width/height:宽度/高度 bordercolor:边框的颜色 align:对齐方式,取值:left(默认) center居中 right居右 bgcolor:背景颜色 background:背景图片 cellspacing间距:单元格与单元格之间的距离 cellpadding边距:单元格中的内容到边界之间的距离
2.2 tr标签
用来定义行:table row
常用属性:
align:水平对齐 取值:left(默认) center right valign垂直对齐 取值:top center bottom bgcolor:背景颜色 background:背景图片
2.3 td标签
用来定义单元格,table data
常用属性:align、valign、bgcolor、background
注意:表格必须是由行组成,行必须由单元格来组成,数据必须放到单元格中
3.合并单元格
合并单元格也称为单元格的跨行跨列
两个属性:
rowspan 设置单元格所跨的行数 colspan 设置单元格所跨的列数
步骤:
六、表单
1.简介
表单是一个包含若干个表单元素的区域,用于获取琐类型的用户数据
表单元素是允许用户在表单输入信息的元素,如文本框、密码框、单选按钮、复选框、下拉列表、按钮等
2.表单结构
2.1表单语法
1
2.2form标签
用来定义表单,可以包含多个表单元素
常用属性:
action:提交数据给谁处理,即处理数据的程序,默认为当前页面 method:提交数据的方式或方法,取值:get(默认),post get和post的区别: get:以查询字符串的形式提交,在地址栏中能看到,长度有限制,不安全 post以表单数据组的形式进行提交,在地址栏中看不到,长度无限制,安全 enctype(encode type)编码类型:提交数据的编码,取值:application/X-www-form-urlencoded(默 认)、multipart/form-data(文件上传)
3.表单元素
大多数的表单元素都是使用 标签来定义的,通过设置属性type来定义不同的表单元素
1
3.1单行文本框
常用属性:
·name名称,很重要,如果没有定义name属性,则该表单元素的数据是无法提交的
·value初始值
·size显示宽度
·maxlength:大字符数,默认是没有限制
·readonly只读:readonly=“readonly”,可简写readonly,即只写属性名
·disabled禁用:disabled=“disabled”, 可简写disabled完全禁用
表单元素被提交的两个条件,1.有name属性2.非disabled
3.2 单选按钮
常用属性:
·name名称:多个radio的name属性必须相同,才能实现互斥(单选)
·value值
·checked:是否被选中,两种状态,选中,未选中 checked=“checked” 简写 checked
3.3 复选框
常用属性与单选按钮radio类似
3.4 文件选择器
常用属性:
·name:名称
·accept设置可选择的文件类型,用来限制上传的文件类型
使用MIME格式字符串对资源类型进行限制
常见的MIME类型:
·纯文本:text/plain text/xml text/html
· 图像:image/png image/jpeg image/gif
4.特殊表单元素
4.1下拉列表
select常用属性:
·name名称
·size行数,同时显示多个选项
·multiple允许同时选择多个
option常用属性:
·value选项值
·selected设置默认选中项
optgroup常用属性:
·label分组的标签
4.2文本域
·name名称
·rows行数
·cols列数
5、其他标签
5.1 label标签
为表单元素提供标签,当选中label标签中的文本内容时会自动将光标切换到与之相关联的表单元素。
常用属性:
·for必须将该属性值设置为与相关联的表单元素的Id属性值相同。
注:几乎所有HTML标签都具有id属性,且id值必须唯一。
5.2 button标签
也表示按钮,与input按钮类似
语法:
1按钮文字或图像
常用属性:
·type按钮的类型,取值: submit(默认)、reset、button
5.3 fieldset和legend标签
fieldset标签,对表单元素进行分组
legend标签,对分组添加标题
七、内嵌框架
1、简介
使用iframe可以在一个页面中引用另一个页面,实现复用、灵活
2、基本用法
语法:
1
常用属性:
· src:引用的页面
· width/height宽度/高度 ,像素或百分比
· frameborder是否显示边框,取值:1(yes) 0(no)—默认
· scrolling是否显示滚动条,取值:yes no auto
· name属性 为框架定义名称
3、在框架中打开链接
1
2
3链接的文本或图像
八、HTML5简介
1、发展
W3C于1992年12月发布了HTML4.0.1标准
W3C于2014年10月发布了HTML5标准
2、特点
· 取消了过时的标签,如font、center等,它们仅具有展示外观的功能
· 增加了一些更具有语义化的标签,如header、footer、aside等
· 增加了一些新功能标签,如canvas、audio、video
· 增加了一些表单控件,如email、date、time、url、search等
· 可以直接在浏览器中绘画(canvas),无需flash
· 增加了本地存储的支持
3、兼容性
http://caniuse.com
提供了各种浏览器版本对HTML5和CSS规范的支持度
九、HTML5新增内容
1、结构相关的标签
用来进行页面结构布局,本身无任何特殊样式,需要使用CSS进行样式设置
· article定义一个独立的内容,完整的文章
· section定义文档的章节、段落
· header文章的头部、页眉、标题
· footer文章的底部、页脚、标注
· aside定义侧边栏
· figure图片区域
· figcaption为图片区域定义标题
· nav定义导航菜单
结构标签只是表明各部分的角色,并无实际的外观样式,与普通div相同
2、语义相关的标签
2.1 mark标签
标注,用来突出显示文本,默认添加黄色背景
2.2 time标签
定义日期和时间,便于搜索引擎智能查找
2.3 details和 summary标签
默认显示summary中的内容,点击后显示details中的内容
注:并不是所有的浏览器都兼容,chrome、opera支持、Firefox、IE浏览器不支持
2.4 meter标签
计数仪,表示度量
常用属性:
· max定义大值,默认为1
· min定义小值,默认为0
· value定义当前值
· high定义限定为高的值
· low定义限定为低的值
· optimum定义佳值
规则:
当value大于high时为绿色
当value在low与high之间时为黄色
当value小于low时为红色
当value小于low时为绿色
当value在low与high之间时为黄色
当value大于high时为红色
2.5 progress标签
进度条,表示运行中的进度
常用属性:
· value定义当前值
· max定义完成的值
3.表单相关
3.1 新增表单元素
新增以下type类型:
· email接收邮箱
· url接收URL
· tel接收电话号码,目前仅在移动设备上有效
· search搜索文框
· number/range接收数字/数字滑块,包含min,max,step属性
· date/month/week/time/datetime日期时间选择器,兼容性不好
· color颜色拾取
作用:
· 具有格式校验的功能
· 可以与移动设备的键盘相关联
3.2新增表单属性
form标签的属性:
· autocomplete是否启动表单的自动完成功能, 取值:on(默认)、off
· novalidate提交表单时不进行校验,默认会进行表单校验
3.3 新增表单元素的属性
新增表单元素属性:input/select/textarea等
· placeholder提示文字
· required是否必填
· autocomplete是否启用该表单元素的自动完成功能
· autofocus设置初始焦点元素
· pattern使用正则表达式(RegExp后面会讲解),进行数据校验
· list使文本元素具有下拉列表的功能,需要配合datalist和option标签一起使用
· form可以将表单元素写在form标签外面,然后通过该属性关联指定的表单
4、多媒体标签
4.1audio标签
在页面中插入音频,不同的浏览器对音频格式的支持不一样
audio常用属性:
· src音频文件的来源
· controls是否显示控制面板,默认不显示
· autoplay是否自动播放,默认不自动播放
· loop是否循环播放
· muted是否静音
· preload是否预加载,取值:none不预加载、auto预加载(默认)、metadata只加载元数据
如果设置了autoplay属性,则该属性无效
可以结合source标签使用,指定多个音频文,浏览器会检测并使用第一个可用的音频文件
4.2 video标签
在页面中插入视频,不同的浏览器对视频格式的支持不一样
用法与audio标签基本相同,增加属性:
· widht/height视频播放器的宽度/高度
· poster在视频加载前显示的图片
<html>
<body>
<tiele>HTML技术</tiele>
</body>
<body>
大家好,欢迎学习html技术!
</body>
</html>1234567
效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h271e4v6-1593240920352)(C:\Users\lenovo\Desktop\新建文件夹\静态网页2\案例\result\案例1.png)]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>标签</title>
</head>
<body text="blue">
标签的组成
<br>
html从入门到精通!
<hr>
<h1>标签的分类</h1>
<hr>
<h2>标签的分类</h2>
<hr>
<h6>标签的分类</h6>
<hr>
<span>哈哈</span>嘿嘿
</body>
</html>1234567891011121314151617181920212223
效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jx6zJE1P-1593240920354)(C:\Users\lenovo\Desktop\新建文件夹\静态网页2\案例\result\案例2.png)]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
图书:<<HTML从入门到精通<<
<hr>
北京 上海 广州
<hr>
在HTML中用<表示<小于号
<hr>
“HTML语言” 或 &qout;HTML语言&qout;
<hr>
版权所有© 2000-2020 高教培训
<hr>
×关闭符号
</body>
</html>123456789101112131415161718192021222324
效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nuFLl3hm-1593240920355)(C:\Users\lenovo\Desktop\新建文件夹\静态网页2\案例\result\案例3.png)]
(剩下的下期出)
原文链接:https://blog.csdn.net/WanXuang/article/details/106982782?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160513384519724835852804%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160513384519724835852804&biz_id=&utm_medium=distribute.pc_search_top_result.none-task-code-2~all~top_position~default-1-106982782-12.nonecase&utm_term=html
作者:WanXuang
出处:从CSDN
heckbox应该不被选择
[Arguments] ${locator}
Checkbox Should Not Be Selected ${locator}
Frame应该包含文本
[Arguments] ${locator} ${text} ${loglevel}=INFO
Frame Should Contain ${locator} ${text} ${loglevel}
List应该无选项
[Arguments] ${locator}
List Should Have No Selections ${locator}
List选项应该是
[Arguments] ${locator} @{items}
List Selection Should Be ${locator} @{items}
Radio按钮不应该被选择
[Arguments] ${group_name}
Radio Button Should Not Be Selected ${group_name}
Radio按钮应该被设置成
[Arguments] ${group_name} ${value}
Radio Button Should Be Set To ${group_name} ${value}
Url应该包含
[Arguments] ${expected}
Location Should Contain ${expected}
Xpath应该匹配X次
[Arguments] ${xpath} ${expected_xpath_count} ${msg}= ${loglevel}=INFO
Xpath Should Match X Times ${xpath} ${expected_xpath_count} ${msg} ${loglevel}
checkbox应该被选择
[Arguments] ${locator}
checkbox should be selected ${locator}
url应该是
[Arguments] ${url}
Location Should Be ${url}
下次确认选择取消
Choose Cancel On Next Confirmation
下次确认选择确定
Choose Ok On Next Confirmation
从List中取消选项
[Arguments] ${locator} @{items}
Unselect From List ${locator} @{items}
从List选择选项
[Arguments] ${locator} @{items}
Select From List ${locator} @{items}
偏移拖拽
[Arguments] ${source} ${xoffset} ${yoffset}
Drag And Drop By Offset ${source} ${xoffset} ${yoffset}
元素应该不包含文本
[Arguments] ${locator} ${expected} ${msg}=
Element Should Not Contain ${locator} ${expected} ${msg}
元素应该不可用
[Arguments] ${locator}
Element Should Be Disabled ${locator}
元素应该不可见
[Arguments] ${locator} ${msg}=
Element Should Not Be Visible ${locator} ${msg}
元素应该包含文本
[Arguments] ${locator} ${text}
Element Should Contain ${locator} ${text}
元素应该匹配x次
[Arguments] ${locator} ${count} ${msg}= ${loglevel}=INFO
Locator Should Match X Times ${locator} ${count} ${msg} ${loglevel}
元素应该可用
[Arguments] ${locator}
Element Should Be Enabled ${locator}
元素应该可见
[Arguments] ${locator}
Element Should Be Visible ${locator}
元素文本应该是
[Arguments] ${locator} ${expected} ${msg}=
Element Text Should Be ${locator} ${expected} ${msg}
全选List元素
[Arguments] ${locator}
Select All From List ${locator}
关闭所有浏览器
Close All Browsers
关闭浏览器
Close Browser
关闭窗口
Close Window
切换浏览器
[Arguments] ${index}
Switch Browser ${index}
创建Webdriver
[Arguments] ${driver_name} ${alias}= ${kwargs}={}
Create Webdriver ${driver_name} ${alias} ${kwargs}
删除Cookie
[Arguments] ${name}
Delete Cookie ${name}
删除所有Cookie
Delete All Cookies
删除本地策略
[Arguments] ${strategy_name}
Remove Location Strategy ${strategy_name}
刷新页面
Reload Page
双击元素
[Arguments] ${locator}
Double Click Element ${locator}
取消选择Checkbox
[Arguments] ${locator}
Unselect Checkbox ${locator}
取消选择Frame
Unselect Frame
回退
Go Back
在图片上按下鼠标左键
[Arguments] ${locator}
Mouse Down On Image ${locator}
在连接上按下鼠标左键
[Arguments] ${locator}
Mouse Down On Link ${locator}
应该出现警告弹窗
[Arguments] ${text}=
Alert Should Be Present ${text}
当前Frame不应该包含
[Arguments] ${text} ${loglvl}=INFO
Current Frame Should Not Contain ${text} ${loglvl}
当前Frame包含
[Arguments] ${text} ${loglevel}=INFO
Current Frame Contains ${text} ${loglevel}
截屏
[Arguments] @{filename}
Capture Page Screenshot @{filename}
打开浏览器
[Arguments] ${url} ${browser}=chrome @{args}
Open Browser ${url} ${browser} @{args}
打开菜单
[Arguments] ${locator}
Open Context Menu ${locator}
执行js
[Arguments] ${code}
Execute Javascript ${code}
执行异步js
[Arguments] ${code}
Execute Async Javascript ${code}
拖拽元素
[Arguments] ${source} ${target}
Drag And Drop ${source} ${target}
按下鼠标左键
[Arguments] ${locator}
Mouse Down ${locator}
按键
[Arguments] ${locator} ${key}
[Documentation] 按键 \ \ text_field \ \ q
...
... 按键 \ \ login_button \ \13 \ \ #ASCII Code for enter Key
Press Key ${locator} ${key}
提交表单
[Arguments] ${locator}=
Submit Form ${locator}
文本区值应该是
[Arguments] ${locator} ${expected} ${msg}=
Textarea Value Should Be ${locator} ${expected} ${msg}
文本区应该包含
[Arguments] ${locator} ${expected} ${msg}=
Textarea Should Contain ${locator} ${expected} ${msg}
文本框值应该是
[Arguments] ${locator} ${expected} ${msg}=
Textfield Value Should Be ${locator} ${expected} ${msg}
文本框应该包含
[Arguments] ${locator} ${expected} ${msg}=
Textfield Should Contain ${locator} ${expected} ${msg}
最大化
Maximize Browser Window
标题应该是
[Arguments] ${title}
Title Should Be ${title}
根据Index从List中取消选项
[Arguments] ${locator} @{indexes}
Unselect From List By Index ${locator} @{indexes}
根据Index从List选择
[Arguments] ${locator} @{indexes}
Select From List By Index ${locator} @{indexes}
根据Label从List中取消选项
[Arguments] ${locator} @{Labels}
Unselect From List By Label ${locator} @{Labels}
根据Label从List选择
[Arguments] ${locator} @{labels}
Select From List By Label ${locator} @{labels}
根据Value从List中取消选项
[Arguments] ${locator} @{values}
Unselect From List By Value ${locator} @{values}
根据Value从List选择
[Arguments] ${locator} @{values}
Select From List By Value ${locator} @{values}
根据值选择列表元素
[Arguments] ${locator} ${value}
Select From List By Value ${locator} ${value}
模拟
[Arguments] ${locator} ${event}
Simulate ${locator} ${event}
注册失败后运行的关键字
[Arguments] ${kwd}
Register Keyword To Run On Failure ${kwd}
添加cookie
[Arguments] ${name} ${value} ${path}= ${domain}= ${secure}= ${expiry}=
添加本地策略
[Arguments] ${strategy_name} ${strategy_keyword} ${persist}=False
Add Location Strategy ${strategy_name} ${strategy_keyword} ${persist}
清除元素文本
[Arguments] ${locator}
Clear Element Text ${locator}
点击元素
[Arguments] ${path}
Click Element ${path}
点击元素坐标
[Arguments] ${locator} ${xoffset} ${yoffset}
Click Element At Coordinates ${locator} ${xoffset} ${yoffset}
点击图片
[Arguments] ${locator}
Click Image ${locator}
点击按钮
[Arguments] ${path}
Click Button ${path}
点击链接
[Arguments] ${locator}
Click Link ${locator}
睡眠
[Arguments] ${time}
Sleep ${time}
确认
Confirm Action
窗口列表
@{list} List Windows
[Return] @{list}
等待元素不包含文本
[Arguments] ${locator} ${text} ${timeout}= ${error}=
Wait Until Element Does Not Contain ${locator} ${text} ${timeout} ${error}
等待元素不可见
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Element Is Not Visible ${locator} ${timeout} ${error}
等待元素包含文本
[Arguments] ${locator} ${text} ${timeout}= ${error}=
Wait Until Element Contains ${locator} ${text} ${timeout} ${error}
等待元素可用
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Element Is Enabled ${locator} ${timeout} ${error}
等待元素可见
[Arguments] ${locator} ${timeout}=30
Wait Until Element Is Visible ${locator} ${timeout}
等待执行成功
[Arguments] ${timeout} ${retry} ${keyword} @{args}
Wait Until Keyword Succeeds ${timeout} minutes ${retry} sec ${keyword} @{args}
等待条件成立
[Arguments] ${condition} ${timeout}= ${error}=
Wait For Condition ${condition} ${timeout} ${error}
等待页面不包含元素
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Page Does Not Contain Element ${locator} ${timeout} ${error}
等待页面包含元素
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Page Contains Element ${locator} ${timeout} ${error}
等待页面包含文本
[Arguments] ${text} ${timeout}= ${error}=
Wait Until Page Contains ${text} ${timeout} ${error}
给元素分配ID
[Arguments] ${locator} ${id}
Assign Id To Element ${locator} ${id}
获取Cookie值
[Arguments] ${name}
${value} Get Cookie Value ${name}
[Return] ${value}
获取List元素
[Arguments] ${locator}
@{items} Get List Items ${locator}
获取List多个选定值
[Arguments] ${locator}
@{values} Get Selected List Values ${locator}
[Return] @{values}
获取List多个选定标签
[Arguments] ${locator}
@{labels} Get Selected List Labels ${locator}
[Return] @{labels}
获取List选定值
[Arguments] ${locator}
${value} Get Selected List Value ${locator}
[Return] ${value}
获取List选定标签
[Arguments] ${locator}
${label} Get Selected List Label ${locator}
[Return] ${label}
获取Selenium等待时间
${sec} Get Selenium Implicit Wait
[Return] ${sec}
获取Selenium超时
${timeout} Get Selenium Timeout
[Return] ${timeout}
获取Selenium速率
${res} Get Selenium Speed
[Return] ${res}
获取xpath匹配次数
[Arguments] ${xpath}
${count} Get Matching Xpath Count ${xpath}
[Return] ${count}
获取元素值
[Arguments] ${locator}
${value} Get Value ${locator}
[Return] ${value}
获取元素属性
[Arguments] ${attribute_locator}
Get Element Attribute ${attribute_locator}
获取元素文本
[Arguments] ${locator}
${text} Get Text ${locator}
[Return] ${text}
获取坐标
${location} Get Location
[Return] ${location}
获取垂直坐标
[Arguments] ${locator}
${vertical} Get Vertical Position ${locator}
[Return] ${vertical}
获取当前Url
${url} Log Location
[Return] ${url}
获取当前页面标题
${title} Log Title
[Return] ${title}
获取所有Cookie
@{cookies} Get Cookies
[Return] @{cookies}
获取所有连接
@{links} Get All Links
[Return] @{links}
获取文本
[Arguments] ${path}
${text} get text ${path}
[Return] ${text}
获取标题
${title} get title
[Return] ${title}
获取水平坐标
[Arguments] ${locator}
@{position} Get Horizontal Position ${locator}
[Return] @{position}
获取焦点
[Arguments] ${locator}
Focus ${locator}
获取窗口名字
@{names} Get Window Names
[Return] @{names}
获取窗口坐标
${x} ${y}= Get Window Position
[Return] ${x} ${y}
获取窗口大小
${width} ${higth}= GET Window Size
[Return] ${width} ${higth}
获取窗口标识
@{windows} Get Window Identifiers
[Return] @{windows}
获取窗口标题
@{titles} Get Window Titles
[Return] @{titles}
获取表格内容
[Arguments] ${table_locator} ${row} ${column} ${loglevel}=INFO
${cell} Get Table Cell ${table_locator} ${row} ${column} ${loglevel}
[Return] ${cell}
获取警告信息
${msg} Get Alert Message
[Return] ${msg}
获取资源
${source} Get Source
[Return] ${source}
获取页面元素
[Arguments] ${locator}
@{elements} Get Webelements ${locator}
[Return] @{elements}
获取页面标题
${title} Get Title
[Return] ${title}
获取页面资源
[Arguments] ${loglevel}=INFO
${source} Log Source ${loglevel}
[Return] ${source}
表头应该包含
[Arguments] ${table_locator} ${expected} ${loglevel}=INFO
table header should contain ${table_locator} ${expected} ${loglevel}
表头应该包含文本
[Arguments] ${table_locator} ${expected} ${loglevel}=INFO
Table Header Should Contain ${table_locator} ${expected} ${loglevel}
表应该包含文本
[Arguments] ${table_locator} ${expected} ${loglevel}=INFO
Table Should Contain ${table_locator} ${expected} ${loglevel}
表格Footer应该包含文本
[Arguments] ${table_locator} ${expected} ${loglevel}
Table Footer Should Contain ${table_locator} ${expected} ${loglevel}
表格列应该包含文本
[Arguments] ${table_locator} ${col} ${expected} ${loglevel}=INFO
Table Column Should Contain ${table_locator} ${col} ${expected} ${loglevel}
表格应该包含
[Arguments] ${table_locator} ${row} ${column} ${expected}
table cell should contain ${table_locator} ${row} ${column} ${expected}
表格应该包含文本
[Arguments] ${table_locator} ${row} ${column} ${expected} ${loglevel}=INFO
Table Cell Should Contain ${table_locator} ${row} ${column} ${expected} ${loglevel}
表格行应该包含文本
[Arguments] ${table_locator} ${row} ${expected} ${loglvl}=INFO
Table Row Should Contain ${table_locator} ${row} ${expected} ${loglvl}
设置Selenium等待
[Arguments] ${seconds}
${return} Set Selenium Implicit Wait ${seconds}
[Return] ${return}
设置Selenium超时
[Arguments] ${seconds}
Set Selenium Timeout ${seconds}
设置Selenium速率
[Arguments] ${speed}
Set Selenium Speed ${speed} seconds
设置浏览器等待时间
[Arguments] ${seconds}
Set Browser Implicit Wait ${seconds}
设置窗口坐标
[Arguments] ${x} ${y}
Set Window Position ${x} ${y}
设置窗口大小
[Arguments] ${width} ${higth}
Set Window Size ${width} ${higth}
跳转
[Arguments] ${url}
Go To ${url}
跳转到
[Arguments] ${url}
go to ${url}
输入密码
[Arguments] ${path} ${passwd}
Input password ${path} ${passwd}
输入文本
[Arguments] ${path} ${str}
Input Text ${path} ${str}
选择Checkbox
[Arguments] ${locator}
Select Checkbox ${locator}
选择Frame
[Arguments] ${locator}
Select Frame ${locator}
选择Radio按钮
[Arguments] ${group_name} ${value}
Select Radio Button ${group_name} ${value}
选择文件
[Arguments] ${locator} ${file_path}
Choose File ${locator} ${file_path}
选择窗口
[Arguments] ${locator}=
Select Window ${locator}
页面应该不包含Checkbox
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Checkbox ${locator} ${msg} ${loglevel}
页面应该不包含Link
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Link ${locator} ${msg} ${loglevel}
页面应该不包含List
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain List ${locator} ${msg} ${loglevel}
页面应该不包含Radio按钮
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Radio Button ${locator} ${msg} ${loglevel}
页面应该不包含元素
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Element ${locator} ${msg} ${loglevel}
页面应该不包含图片
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Image ${locator} ${msg} ${loglevel}
页面应该不包含按钮
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Button ${locator} ${msg} ${loglevel}
页面应该不包含文本
[Arguments] ${text} ${lvl}=INFO
Page Should Not Contain ${text} ${lvl}
页面应该不包含文本框
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Textfield ${locator} ${msg} ${loglevel}
页面应该包含Checkbox
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Checkbox ${locator} ${msg} ${loglevel}
页面应该包含Link
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Link ${locator} ${msg} ${loglevel}
页面应该包含List
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain List ${locator} ${msg} ${loglevel}
页面应该包含Radio按钮
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Radio Button ${locator} ${msg} ${loglevel}
页面应该包含元素
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Element ${locator} ${msg} ${loglevel}
页面应该包含图片
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Image ${locator} ${msg} ${loglevel}
页面应该包含按钮
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Button ${locator} ${msg} ${loglevel}
页面应该包含文本
[Arguments] ${text} ${loglevel}=INFO
Page Should Contain ${text} ${loglevel}
页面应该包含文本框
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Textfield ${locator} ${msg} ${loglevel}
鼠标悬停
[Arguments] ${locator}
Mouse Over ${locator}
鼠标移出
[Arguments] ${locator}
Mouse Out ${locator}
鼠标释放
[Arguments] ${locator}
Mouse Up ${locator}
RFS自动化测试工具安装与使用总结
一,调试
1,在调试时,总时提示“无法打开浏览器”
解决办法:
1,把浏览器的代理关闭
2,把浏览器的显示比例调到100%
3,在IE设置的安全选项中,把启用保护模式开启
4,去除进入系统弹出的登录提示
在浏览器中---工具---internet选项---安全---把只在intranet自动登录,改为匿名登录
二,安装加载库
1,RequestsLibrary
先安装Requests工具,再安装RequestsLibrary
再在robot中进行加载lib,如果加载的库还是红色的,重启就可以了
三,常用关键字
open browser 打开浏览器
input text 在文本框中录入内容
input password 在文本框中录入密码
click button 点击按钮
page should (NOT)contain (link,button,element,checkbox,list) 页面是否出现指定的内容
close browser 关闭浏览器
多个打开浏览器切换
open browser http://127.0.0.1:8000/ ie local
switch browser local
针对页面弹出窗口的确认键
confirm action----类似于点击弹出窗的确认或OK键
alert should be present 当前弹窗的内容 -----判断当前指定内容的弹窗是否存在
get alert message---获取弹出窗的信息
${msg}= get alert message
should be equal as string ${msg} *****
在弹窗中选择取消操作
a,choose cancle on next confirmaction
b,confirm action
设置日志级别
Set Log Level TRACE
下拉列表
select from list xpath value
select from list by value xpath value
select from list by index xpath value
框架
select frame id=fra
unselect frame
复选框
select checkbox id=CheckYes
unselect checkbox id=CheckNo
checkbox should not be selected
select checkbox
checkbox should be selected
单选框
select radio button radio1---单选框名称 A--value)
click element id=registerGenderMale
Oracle数据库
connect to database using custom params(关键字) cx_Oracle 用户名,密码,SID
${row} row count select * from 表1;
等待页面加载
wait until page contains element
sleep
reload page---刷新
注释
Comment
几个关键字的区别
Wait Until Keyword Succeeds
wait until page contains element
SLEEP
element should contain
page should contain element
page should contain
Element Should Not Be Visible
判断的使用
判断条件---数字对比
Run Keyword If ${res} == 0 执行的关键字
... ELSE 执行的关键字2
判断条件---字符对比
Run Keyword If ‘${res}’ == ‘ttttt' 执行的关键字
判断条件---布尔类型对比
Run Keyword If '${res}' == '${true}' 执行的关键字
HTTP接口
create session httpserver http://localhost:8000
${addr} Get request httpserver users/s
should be equal as strings ${addr.status_code} 200
log ${addr.content}
${resp} tojson ${addr.content}
四,常见问题解答
1,定位不到元素
Element locator '//input[@id="registerName"]' did not match any elements.
前端代码
<td>
<div class="c">
<span id="disp_registerName" class="cp edit_hide" style="display: none;"></span>
<input id="registerName" class="pa_ui_text edit_show pa_ui_element_normal" type="text" otitle="车主姓名" value="" name="register.name" style="display: inline;">
</div>
</td>
解决方法:
先从最里面的元素开始一级一级往上找,找到iframe,然后先select frame这个ID就可以定位到里面的元素了。
2,InvalidElementStateException: Message: u'Element must not be hidden, disabled or read-only'
针对根据复选框的状态,解决文本框中默认带出内容时。如果这样写就会报错
select checkbox id=noLicenseFlag
input text id=registerName 湘A*
像这样的组合,后面那句input text id=registerName 湘A*直接删除就可以了。
3,页面操作按钮提示找不到elements
click button id=carInfoSubmitBtn
改为click element id=carInfoSubmitBtn
4,根据录入框内容弹出框框,定位不到元素
采用相对路径的方式定位,用firefox浏览器打开地址,按F12获取元素位置,右击---选择复制XPATH
放在脚本中形式为:xpath=/html/body/div[9]/div[2]/table/tbody/tr[4]/td[4]
6,InvalidElementStateException: Message: u'Element must not be hidden, disabled or read-only'
出现这个现象是因为脚本执行快,而页面的元素还没有加载完成造成的。
等待页面加载
wait until page contains element或sleep
7,页面执行时没有报错,但一直停在那里了
利用Mouse out 关键字,移开鼠标动作。
8,使用close broswer关闭浏览器不起作用
首先安装pywin32-217.win32-py2.7.exe,再安装AutoItLibrary库,在close broswer关键字
下一行,增加删除进线的关键字: process close iexplore.exe
10,查看所有有关robot相关库的版本
pip list
11,通过pip升级库或程序版本
1,python -m pip install --upgrade pip
报错:
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
2,根据提示,执行命令
python -m pip install --upgrade pip
报错:Requirement already up-to-date: pip in c:\python27\lib\site-packages
3,找到c:\python27\lib\site-packages下这个目录pip-8.1.1.dist-info并删除,重新执行
python -m pip install --upgrade pip
4,查看是否更新成功
pip list后显示最新版本
12,利用pip更新库或RIDE或robot
pip install robotframework-ride --upgrade
再用pip list可以看到升级成功的版本号了
13,Run Keyword And return status关键字识别不了
利用pip更新RIDE,robot,selenium2Library
14,ImportError:No module named cx_Oracle
根据连接oracle客户端的版本如:11G,操作系统是32位还是64位
安装对应的cx_Oracle安装包,如:cx_Oracle-5.1.2-11g.win32-py2.7
15,Unable to acquire Oracle environment handle
在oracle客户端的目录中把oci.dll,oraocci11.dll,oraociei11.dll文件复制到C:\Python27\Lib\site-packages目录中
16,日志目录
Log: d:\users\liujun~1\appdata\local\temp\RIDEwzyfth.d\log.html
Report: d:\users\liujun~1\appdata\local\temp\RIDEwzyfth.d\report.html
17,在IE中如果click不起作用,用如下关键字
press key id=kw \13
18,单选框实例
<p class="checkBox">
<input id="registerGenderMale" class="pa_ui_element_normal" type="radio" value="M" name="register.gender" otitle="车主-性别男">
<label class="radiotxt" hidefocus="hidefoces" for="registerGenderMale">男</label>
<input id="registerGenderFemale" class="pa_ui_element_normal" type="radio" value="F" name="register.gender" otitle="车主-性别女">
<label class="radiotxt" hidefocus="hidefoces" for="registerGenderFemale">女</label>
</p>
select radio button register.gender M
19,下拉列表实例
<div class="pa_ui_dropselect_inner paui-clearfix">
<span class="pa_ui_dropselect_input_Container" style="width: 71px;">
<input class="pa_ui_dropselect_input" type="text" readonly="readonly" otitle="V3版-送单地址-县级市" style="width: 71px; opacity: 1;">
</span>
<span class="pa_ui_dropselect_button" otitle="V3版-送单地址-县级市">
</div>
select from list class="pa_ui_dropselect_inner paui-clearfix" 江北区
20,通过PIP安装Selenium2Library报错
C:\Users\Administrator>pip install Selenium2Library
Collecting Selenium2Library
Could not find a version that satisfies the requir
versions: )
No matching distribution found for Selenium2Library
解决办法:
pip install robotframework-Selenium2Library
就可以了
21,安装IEDriver报错
WebDriverException: Message: 'IEDriverServer.exe' executable needs to be in PATH. Please download fromhttp://selenium-release.storage.googleapis.com/index.html and read up at https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
解决办法:
下载对应系统版本的IEDriverServer.exe放在IE的安装目录下和Python的根目录下,并设置PATH。
22,滚动鼠标拖动滚动条到最顶部或最底部
execute javascript id.scrollTop其中id为滚动条区域对应的id,用法:
如:execute javascript J_introCon.scrollTop=0是拖到最顶部,execute javascript J_introCon.scrollTop=100000是拖到最底部
23,在CASE中的setup中可以设置运行CASE前,运行SETUP里面的关键字。teardown中可以设置运行CASE后,指定要运行的关键字
24,满足条件结束脚本
exit for loop
如:如果count值为0,则结束CASE
run keyword if ${count}==0 exit for loop
25,执行SQL时报错:DatabaseError:ORA-00911:Invalid character
去掉SQL后面的 ;
26,执行SQL查询
Execute sql String select * from 表名
Robot Framework与Web界面自动化测试学习笔记:简单例子
假设环境已经搭建好了。这里用RIDE( Robot Framework Test Data Editor)工具来编写用例。下面我们对Robot Framework简称rf。
我们先考虑下一个最基本的登录功能的测试用例。
一、自动化测试与人工测试
在开始编写用例之前,我们先来思考下自动化测试和人工测试的区别。对于web页面的人工测试,我们想下,如果去测试,怎么操作呢?不外乎如下的基本动作:
1)打开浏览器
2)输入url (前提web服务器要正常启动运行着)
3)等待页面显示出来
4)用眼睛看页面显示的内容是否与自己想象的一致,如果一致,认为功能正常,否则,会认为程序有问题。
5)通过鼠标、键盘执行相关的操作,通过页面的变化和内容显示继续进行检查功能是否正常。
那么什么是自动化测试呢?其本质就是将人的操作过程(打开浏览器、输入url、鼠标点击、键盘输入等)以及验收标准(在人脑中验收)转换为测试代码。
有了测试代码,就可以让其自动运行了。
二、登录用例设计
一个登录功能,想象下如果是人工测试,那基本的测试过程一般如下:
1)打开浏览器、输入登录url
2)输入用户名、密码(也许还有别的输入项,如验证码,则取决于程序本身),点击登录按钮
3)如果是正确的用户名密码,应该出来相应的页面;如果是错误的,应该出来错误页面或错误提示信息。
那我们看看利用Robot Framework怎么写用例。
三、用例编写
1、成功登陆的用例1
successLogin
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy
click button id=loginBtn
Wait Until Element Is Visible id=userid
close browser
下面我们看下上面代码的含义
1)successLogin是用例名,是自己取的
2)后面的语句,每句都是 “关键字+参数(0个或多个)”的格式,其中蓝色的词组就是关键字。这个例子的关键字是rf框架中的内置关键字。
用户可以定义自己的关键字。
open browser http://localhost/nau/login ff
这句代码的含义,其实看上去就能理解。open browser是关键字,表示打开浏览器;http://localhost/nau/login 是第一个参数,是要打开的页面url;ff是第二个参数,代表要用的浏览器类型,其中ff表示是firefox浏览器,gc表示是chrome浏览器,ie表示是Internet Explorer浏览器。这里我们用的是firefox浏览器。
input text id=userid xxx
这句代码,input text 是关键字,表示要在html组件(如文本框)中输入信息, id=userid 是 第一个参数,用于定位用来输入的html组件,这里的id表示通过元素的id来定位,userid就是元素的id值。如果页面中存在一个id为userid的输入框,则就能找到。 xxx是第二个参数,表示要输入的值。想象下,如果是人工操作,就是在界面中找到这个输入框,敲击键盘输入xxxx这几个字符。
看到这里,我们可以把关键字当作一个函数(其实它本质上就是一个函数),后面跟的是函数参数,有的关键字有参数,有的没有。
input password id=password yyy
这句代码,也非常好理解了,就是在密码框中输入密码了。其中input password为关键字。
click button id=loginBtn
这句代码,看上去也明白了,click button 是关键字,表示点击按钮;id=loginBtn是第一个参数,用于定位要点击的按钮,这里也是用id来定位的。
Wait Until Element Is Visible id=userid
前面的几句代码,进行的相关的操作,这句代码就是检查操作结果。如果登录成功,会出现新的页面,并且页面上应该有个元素会显示用户的登录名。
这里的Wait Until Element Is Visible 是关键字,顾名思义,就是等待元素可见; id=userid就是要显示的元素,这里同样是通过id定位。
实际上这个检查是不完善的,这里只是检查了是否有id为userid的元素,但元素的内容呢(正常内容应该是xxx),没有检查。这点我么在下个用例介绍。
close browser
上面是这个用例的最后一个语句。这很好理解了,就是关闭浏览器。close browser是关键字,该关键字没有参数。
执行该用例。如果系统存在用户名为xxx和密码为yyy的用户,则该用例就会成功。
2、成功登陆用例2
上面是一个最基本的用例。上面用例存在一个问题,就是检查用例成功的标准是看希望的html元素是否存在。但很多时候不仅需要判断希望的元素是否存在,还需要判断元素的内容是否符合预期。就上面这个用例,希望 id为userid的元素的内容是xxx。那用例应该如何写呢?
successLogin2
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy
click button id=loginBtn
${value} get text id=userid
Should Be Equal ${value} xxx
close browser
和上个用例相比,区别就是检查语句(上面红色的2行)。
其中${value} get text id=userid的含义是 利用关键字 get text 获取id为userid元素的内容放到变量${value}中。
而 Should Be Equal ${value} xxx 语句,Should Be Equal 是关键字,用来断言两个参数的值是否相等,如果不等,则表示失败。
3、失败登录用例
上面是验证成功登录的用例。那应该也有验证登录失败的用例。其思路差不多,就是当登录失败后的页面是啥。通过代码来进行检查。
我们假设登录失败后会出现一个新的页面,页面中有文本 “用户名或密码错误”字样。那么用例就可以这么写。
errorLogin
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy123
click button id=loginBtn
Wait Until Page Contains 用户名或密码错误
close browser
相比前面的用例,区别还是验收语句。上面的验收语句一看就明白,Wait Until Page Contains 是关键字,用于检查页面中是否包含预期的信息。
4、自定义关键字
可以看出,上面3个用例,前面的4个语句,区别只是输入的参数 用户名和密码的值区别,我们自然会想到,可以把这4个语句封装成一个关键字,包含两个参数用户名和密码。
关键字定义如下:
login
[Arguments] ${username} ${password}
open browser http://localhost/boot/login ff
input text id=userid ${username}
input password id=password ${password}
click button id=loginBtn
使用该关键字的用例如下
loginSuccessWithKeywords
login xxx yyy
${value} get text id=userid
Should Be Equal ${value} xxx
close browser
loginErrorWithKeywords
login xxx yyy123
Wait Until Page Contains 用户名或密码错误
close browser
5、用例的setup和teardown
每个用例,从整个实现讲。一般包括如下三大部分:
1)执行条件设置部分(setup部分):因为用例的执行,通常需要一些条件。如前面的登录成功用例,需要用户已经存在。
2)用例执行部分:包括该用例进行的操作,对结果的验证
3)清理部分(teardown部分):在自动化测试中,我们希望用例执行后,对当前环境不会有任何破坏。因此一般需要做些清理工作,包括第一部分条件设置对系统造成的影响和用例执行过程中对系统造成的影响。
rf对这也提供了支持,可以把一个用例分成三部分。虽然我们写成一部分,从最终效果上讲没区别。但分开了,会更加符合逻辑,用例也非常清楚。
对于我们这个登录用例,可以看出,每个用例完成的最后一步都要关闭浏览器,这里用的是close browser。
因为各个用例都是公共的,我们可以把这放到用例包的teardown中。
*** Settings ***
Test Teardown close browser
这样每个用例的最后语句close browser都不需要了。
把一些语句放到teardown中,还有一个好处是,无论用例执行部分出现什么问题,最后的teardown都会保证被执行。
*请认真填写需求信息,我们会在24小时内与您取得联系。