Robot Framework自动化测试六
Selenium2Library 库
Selenium 是非常流行的开源 web 自动化测试工具,对于大多使用 Robot Framework 框架的人都会有使用 Selenium2Library 库来进行 web 自动化测试工具。
Selenium 是支持多种开发语言的,对于不同的语言来说都有其对应的库。
对 Robot Framework 框 架 的 Selenium 库 有 两 个 : SeleniumLibrary 和 Selenium2Library 。
SeleniumLibrary 是基于 Selenium1.0 开发的,Selenium2Library 是基于 Selenium2.0 开发的。如果没有历史遗留问题,我们直接使用 Selenium2Library。
安装 Selenium2Library
image.png下载地址:https://github.com/robotframework/Selenium2Library
安装命令
pip install robotframework-selenium2library
image.png
将“Selenium2Library”库添加到相应的测试套件中。显示黑色,加载成功。
image.png通过按 F5 快捷键来查询库所提供的关键字
image.png第一个例子
我们打开浏览器,打开的网址是https://www.baidu.com,浏览器选择chrome
image.png我们需要选择和我们chrome浏览器对应的chromedriver.exe版本,并且放入python的工作目录下。
元素定位
对于 Web 自动化测试来说,就是操作页面上的各种元素,在操作元素之间需要先找到元素,换句话说就是定位元素。
Selenium2Library 提供了非常丰富的定位器:
虽提供了这么多种定位方式,并不是要求我们每一种都要学会。在这里我只介绍 4 种定位方式,id、name、xpath 和 css。介绍 id 和 name,是因为这两种定位方式非常简单且实用,介绍 xpath 和 css,是因为这两种定位方式足够强大,可以满足几乎所有定位需求。
需要一定的HTML和CSS知识
id 和 name 定位
假如把一个元素看作一个人的话,id 和 name 可以看作一个人的身份证号和姓名。当然,这些属性值
是否唯一要看前端工程师如何设计了。
根据上面的例子,百度输入框可以取 id 或 name 进行定位。(前提是 id 和 name 的值在当页面上唯一)
id = kw1
name = wd
在 Robot framework 中就是这样写的:
Input text 用于输入框的关键字,“robot framework 学习”是要给输入框输入的内容。
百度按钮只 id 数据可以利用:
id=su
image.png
Click Button 是按钮点击的关键字
xpath 定位
XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现,所以 selenium
用户可是使用这种强大语言在 web 应用中定位元素。
假如,一个人没身份证号没名字怎么找呢?想想你是怎么找朋友吃饭的,他手机不通,电话不回呢?
直接上他家去呗,那你一定有他家住址,xx 市 xx 区 xx 路 xx 号。xpath 就可以通过这种层级关系找到元素。
1、xpath 的绝对路径:
xpath = /html/body/div[1]/div[4]/div[2]/div/form/span[1]/input
我们可以从最外层开始找,html 下面的 body 下面的 div 下面的第 4 个 div 下面的....input 标签。通过
一级一级的锁定就找到了想要的元素。
2、xpath 的相对路径:
绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候用相对路径更简便。
2.1、元素本身:
Xpath 同样可以利用元素自身的属性:
Xpath = //[@id=’kw1’]
//表示某个层级下,表示某个标签名。@id=kw1 表示这个元素有个 id 等于 kw1 。
当然,一般也可以制定标签名:
Xpath = //input[@id=’kw1’]
元素本身,可以利用的属性就不只局限为于 id 和 name ,如:
Xpath = //input[@type=’text’]
Xpath = //input[@autocomplete=’off’]
但要保证这些元素可以唯一的识别一个元素。
2.2、找上级:
当我们要找的一个人是个刚出生的婴儿,还没起名子也没有入户口(身份证号),但是你会永远跟在
你父亲的身边,你的父亲是有唯一的名字和身份证号的,这样我们可以先找到你父亲,自然就找到你的。
元素的上级属性为:
<form id="form1" class="fm" action="/s" name="f1">
<span class="bg s_ipt_wr">
<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" utocomplete="off">
找爸爸:
xpath = //span[@class=’bg s_ipt_w’]/input
如果爸爸没有唯一的属性,可以找爷爷:
xpath = //form[@id=’form1’]/span/input
这样一级一级找上去,直到 html ,那么就是一个绝对路径了。
2.3、布尔值写法:
如果一个人的姓名不是唯一的,身份证号也不是唯一的,但是同时叫张三 并且 身份证号为 123 的
人却可以唯一的确定一个人。那么可以这样写:
Xpath = //input[@id=’kw1’ and @name=’wd’]
可以 and ,当然也可以 or :
Xpath = //input[@id=’kw1’ or @name=’wd’]
但 or 的实际意义不太。我们一般不需要说,找的人名字或者叫张三,或者身份证号是 123 也可以。
Robot framework 中的写法:
image.pngcss 定位
CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策略。
CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比 XPath 快,但对于初学者来说比较难以学习使用,下面我们就详细的介绍 CSS 的语法与使用。
CSS 选择器的常见语法:
image.png通过 class 属性定位:
css=.s_ipt
css=.bg s_btn
csscss_selector()方法用于 CSS 语言定位元素,点号(.)表示通过 class 属性来定位元素。
通过 id 属性定位:
css=#kw
css=#su
井号(#)表示通过 id 属性来定位元素。
通过标签名定位:
css=input
在 CSS 语言中用标签名定位元素不需要任何符号标识,直接使用标签名即可,但我们前面已经了解到
标签名重复的概率非常大,所以通过这种方式很难唯一的标识一个元素。
通过父子关系定位:
css=span>input
上面的写法表示有父亲元素,它的标签名叫 span,查找它的所有标签名叫 input 的子元素。
通过属性定位:
css=input[autocomplete='off']
css=input[maxlength='100']
css=input[type='submit']
在 CSS 当中也可以使用元素的任意属性,只要这些属性可以唯一的标识这个元素。
组合定位:
我们当然可以把上面的定位策略组合起来使用,这样就大大加强了元素的唯一性。
css=span.bg s_ipt_wr>input.s_ipt
css=span.bg s_btn_wr>input#su
有一个父元素,它的标签名叫 span,它有一个 class 属性值叫 bg s_ipt_wr,它有一个子元素,标签名叫 input,并且这个子元素的 class 属性值叫 s_ipt。好吧!我们要找的就是具有这么多特征的一个子元素。
Robot framework 中的写法:
image.png
Selenium2Library 关键字
通过不同的浏览器执行脚本
浏览器对应的关键字:
image.pngopen browser 同样也可以打开本地 html 页面,如:
image.png
备注:
要想通过不同的浏览打开 URL 地址,一定要安装浏览器相对应的驱动。
(可以查看我之前的selenium驱动器配置详解)
关闭浏览器
image.png浏览器最大化
image.png
Maximize Browser Window 关键字使当前打开的浏览器全屏
设置浏览器窗口宽、高
image.png
get windows size 关键字用于打设置打开浏览器的宽度和高度。以像素为单位,第一个参数 800 表示宽度,第二个参数 600 表示高度。
image.pngget windows size 关键字,用于获取当前浏览器的宽度和高度。获得浏览浏览器窗口宽、高,将显示在log.html 的日志中。
文本输入
image.pnginput text 关键字用于向文本框内输入内容。
xpath=//* [@] :表示元素定位,定位文本输入框
点击元素
image.pngClick Element 关键字用于点击页面上的元素,单击任何可以点击按钮、文字/图片连接、复选框、单选框、甚至是下拉框等。
xpath=//* [@] :表示元素定位,定位点击的元素。
点击按钮
image.pngClick Element 关键字用于点击页面上的按钮。
Xpath=//* [@] :表示元素定位,定位点击的按钮。
等待元素出现
image.pngWait Until Page Contains Element 关键字用于等待页面上的元素显示出来。
Xpath=//* [@] :表示元素定位,这里定位出现的元素
42 : 表示最长等待时间。
Error : 表示错误提示,自定义错误提示,如:“元素不能正常显示”
获取 title
image.pngget title 关键字用于获得当前浏览器窗口的 title 信息。
这里只获取 title 是没有意义的,我们通常会将获取的 title 传递给一个变量,然后与预期结果进行比较。从而判断当前脚本执行成功。
获取 text
image.pngget text 关键字用于获取元素的文本信息。
xpath=//* [@] : 定位文本信息的元素。
获取元素属性值
image.pngid=kw@name:id=kw 表示定位的元素。@nam 获取这个元素的 name 属性值。
cookei 处理
image.pngget cookies 获得当前浏览器的所有 cookie 。
get cookie value 获得 cookie 值。key_name 表示一对 cookie 中 key 的 name 。
add cookie 添加 cookie。添加一对 cooke (key:value)
delete cookie 删除 cookie。删除 key 为 name 的 cookie 信息。
delete all cookies 删除当前浏览器的所有 cookies。
验证
获得浏览器 title 进行比较
image.pngOpen Browser 通过 chrome 打开百度首页。
Get Title 获得浏览器窗口的 titile ,并赋值给变量${title}
Should Contain 比较${title}是否等于“百度一下,你就知道”。
获得文本信息进行比较
image.png表单嵌套
有时候和页面中会出现表单嵌套,这个时候需要进入到表单才能操作相关元素
image.pngSelect Frame 进入表单,Xpath=//* [@] 表示定位要进入的表单。
Unselect Frame 退出表单。
下拉框选择
image.pngUnselect From List By Value 关键字用天选择下拉框。
Xpath=//* [@] 定位下拉框;
Vlaue 选择下拉框里的属性值。
执行 JavaScript
在一些特殊的情况下需要调用 JavaScript 代码。
image.pngExecute Javascript 关键字用于使用 JavaScript 代码