SeleniumLibrary 库

一、selenium

1.1、Selenium 介绍

  Selenium 自动化测试工具,它主要是用于 Web 应用程序的自动化测试,但并不只局限于此,同时支持所有基于 web 的管理任务自动化。
  Selenium 的特点:
  • 开源,免费
  • 多浏览器支持:FireFox、Chrome、IE、Opera
  • 多平台支持:linux 、windows、MAC
  • 多语言支持:java、Python、Ruby、php、C#、JavaScript
  • 对 web 页面有良好的支持
  • 简单(API 简单)、灵活(用开发语言驱动)
  • 支持分布式测试用例执行
  Selenium 是支持多种开发语言的,对于不同的语言来说都有其对应的库。

2.2、安装 SeleniumLibrary

>pip install robotframework-seleniumlibrary
在前面内容中已经知道了如何添加库,现在我们将“SeleniumLibrary”库添加到相应的测试套件中。

  添加完成,黑色示添加的库正常,红色表示库不存。如果为红色,请检查site-packages 目录下是否有 Selenium2Library 目录

1.3第一个例子

  我们已经有了学习 Robot Framework 的经验,通过按 F5 快捷键来查询库所提供的关键字。

  如上图,自动化脚本从打开浏览器开如,我想打开一个浏览器,自然想到的是以“open”为关键字进行搜索,结果找到了一个“Open Browser”的关键字,点击这个关键字,显示它的用法和说明。  

  根据说明,我们来尝试创建这个打开浏览器的操作吧,这里跟新着我们写一个 web 自动化测试用例(百度搜索用例):

执行结果:

Starting test: Test Project.Test Suit.baidu_search
20211107 22:53:51.920 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'.
20211107 22:53:51.921 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE0vzfcxc0.d\geckodriver-3.log
20211107 22:54:00.407 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'.
20211107 22:54:00.632 : INFO : Clicking button 'id=su'.
20211107 22:54:05.906 : INFO : Slept 5 seconds
Ending test: Test Project.Test Suit.baidu_search

二、元素定位

  对于 Web 自动化测试来说,就是操作页面上的各种元素,在操作元素之间需要先找到元素,换句话说就是定位元素。
  SeleniumLibrary 提供了非常丰富的定位器:

  虽提供了这么多种定位方式,并不是要求我们每一种都要学会。在这里我只介绍 4 种定位方式,id、name、xpath 和 css。介绍 id 和 name,是因为这两种定位方式非常简单且实用,介绍 xpath 和 css,是因为这两种定位方式足够强大,可以满足几乎所有定位需求。

2.1 前端工具

  在学习定位之前,有必要先介绍一下浏览器的前端具。
  firefox 浏览器可以通过 firebug 工具查查看页面元素。

2.2 id 和 name 定位

  假如把一个元素看作一个人的话,id 和 name 可以看作一个人的身份证号和姓名。当然,这些属性值是否唯一要看前端工程师如何设计了。

  根据上面的例子,百度输入框可以取 id 或 name 进行定位。(前提是 id 和 name 的值在当页面上唯一)
  id = kw1
  name = wd
  在 Robot framework 中就是这样写的:

  Input text 用于输入框的关键字,“robot framework 学习”是要给输入框输入的内容。

  百度按钮只 id 数据可以利用:
  id=su

  Click Button 是按钮点击的关键字。

2.3 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 的相对路径:

  绝对路径的用法往往是在我们迫不得已的时候才用的。大多时候用相对路径更简便。
  •  元素本身:
Xpath 同样可以利用元素自身的属性:
Xpath = //*[@id=’kw1’]
//表示某个层级下,*表示某个标签名。@id=kw1 表示这个元素有个 id 等于 kw1 。
当然,一般也可以制定标签名:
Xpath = //input[@id=’kw1’]
元素本身,可以利用的属性就不只局限为于 id 和 name ,如:
Xpath = //input[@type=’text’]
Xpath = //input[@autocomplete=’off’]
但要保证这些元素可以唯一的识别一个元素。
  •   找上级:
  当我们要找的一个人是个刚出生的婴儿,还没起名子也没有入户口(身份证号),但是你会永远跟在你父亲的身边,你的父亲是有唯一的名字和身份证号的,这样我们可以先找到你父亲,自然就找到你的。
  元素的上级属性为:
<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 ,那么就是一个绝对路径了。
  •   布尔值写法:
  如果一个人的姓名不是唯一的,身份证号也不是唯一的,但是同时叫张三 并且 身份证号为 123 的人却可以唯一的确定一个人。那么可以这样写:
  Xpath = //input[@id=’kw1’ and @name=’wd’]
  可以 and ,当然也可以 or :
  Xpath = //input[@id=’kw1’ or @name=’wd’]
  但 or 的实际意义不太。我们一般不需要说,找的人名字或者叫张三,或者身份证号是 123 也可以
  
  Robot framework 中的写法:

2.4 css 定位

  CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策略。
  CSS 可以比较灵活选择控件的任意属性,一般情况下定位速度要比 XPath 快,但对于初学者来说比较难以学习使用,下面我们就详细的介绍 CSS 的语法与使用。
  CSS 选择器的常见语法:
  • 通过 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 中的写法:

三、SeleniumLibrary 关键字

关于 Selenium2Library 的关键字,我们可以参考通过 F5查找 Selenium2Library 关键字库:

3.1浏览器驱动

通过不同的浏览器执行脚

浏览器对应的关键字:

open browser 同样也可以打开本地 html 页面,如:

备注:

  • 要想通过不同的浏览打开 URL 地址,一定要安装浏览器相对应的驱动。
  • chrome 的驱动为:chromedriver.exe 。
  • IE 的驱动为:IEDriverServer.exe
  • 浏览器默认为空时启动 FireFox。

3.2 关闭浏览器

close browser 关闭当前的浏览器。close all browser 关键所有打开的浏览器和缓存重置

3.3 浏览器最大化

Maximize Browser Window 关键字使当前打开的浏览器全屏。

3.4 设置浏览器窗口宽、高

get windows size 关键字用于打设置打开浏览器的宽度和高度。以像素为单位,第一个参数 800 表示宽
度,第二个参数 600 表示高度

测试结果:

Starting test: Test Project.Test Suit.baidu_search
20211108 13:51:33.456 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'.
20211108 13:51:33.457 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-2.log
20211108 13:51:41.610 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'.
20211108 13:51:42.123 : INFO : Clicking button 'id=su'.
20211108 13:51:42.465 : INFO : ${width} = 1295
20211108 13:51:42.465 : INFO : ${height} = 695
20211108 13:51:42.466 : INFO : 1295
20211108 13:51:42.467 : INFO : 695
20211108 13:51:47.474 : INFO : Slept 5 seconds
Ending test: Test Project.Test Suit.baidu_search

3.5 文本输入

input text 关键字用于向文本框内输入内容。

xpath=//* [@] :表示元素定位,定位文本输入框。

3.6 点击元素

  Click Element 关键字用于点击页面上的元素,单击任何可以点击按钮、文字/图片连接、复选框、单选
框、甚至是下拉框等。
  xpath=//* [@] :表示元素定位,定位点击的元素。

3.7 点击按钮

Click Button关键字用于点击页面上的按钮。

Xpath=//* [@] :表示元素定位,定位点击的按钮。

3.8 等待元素出现

Wait Until Page Contains Element 关键字用于等待页面上的元素显示出来。
Xpath=//* [@] :表示元素定位,这里定位出现的元素
42 : 表示最长等待时间。
Error : 表示错误提示,自定义错误提示,如:“元素不能正常显示”
 

测试结果:

Starting test: Test Project.Test Suit.baidu_search
20211108 14:00:30.027 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'.
20211108 14:00:30.028 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-3.log
20211108 14:00:38.176 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'.
20211108 14:00:38.519 : INFO : Clicking button 'id=su'.
20211108 14:00:38.867 : INFO : ${width} = 1295
20211108 14:00:38.867 : INFO : ${height} = 695
20211108 14:00:38.868 : INFO : 1295
20211108 14:00:38.869 : INFO : 695
20211108 14:00:43.879 : INFO : Slept 5 seconds
Ending test: Test Project.Test Suit.baidu_search

3.9 获取title

get title 关键字用于获得当前浏览器窗口的 title 信息。
这里只获取 title 是没有意义的,我们通常会将获取的 title 传递给一个变量,然后与预期结果进行比较。从而判断当前脚本执行成功。

执行结果:

Starting test: Test Project.Test Suit.baidu_search
20211108 14:22:12.707 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'.
20211108 14:22:12.710 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-9.log
20211108 14:22:20.330 : INFO : Typing text 'robotframeworkѧϰ' into text field 'id=kw'.
20211108 14:22:20.718 : INFO : Clicking button 'id=su'.
20211108 14:22:21.052 : INFO : ${a} = 百度一下,你就知道
20211108 14:22:21.053 : INFO : 百度一下,你就知道
20211108 14:22:21.055 : INFO : ${width} = 1295
20211108 14:22:21.056 : INFO : ${height} = 695
20211108 14:22:21.056 : INFO : 1295
20211108 14:22:21.057 : INFO : 695
20211108 14:22:26.065 : INFO : Slept 5 seconds
Ending test: Test Project.Test Suit.baidu_search

3.10 获取text

get text 关键字用于获取元素的文本信息。
xpath=//* [@] : 定位文本信息的元素。

3.11 获取元素属性值

   id=kw@name:id=kw 表示定位的元素。@nam 获取这个元素的 name 属性值。

  

  3.12 cookei 处理

  •   get 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。

  

  3.13 验证

  获得浏览器 title 进行比较。

  •   Open Browser 通过 chrome 打开百度首页。
  •   Get Title 获得浏览器窗口的 titile ,并赋值给变量${title}
  •   Should Contain 比较${title}是否等于“百度一下,你就知道”。

  

  测试结果:

Starting test: Test Project.Test Suit.baidu_search
20211108 14:52:20.175 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'.
20211108 14:52:20.176 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-11.log
20211108 14:52:27.393 : INFO : ${title} = 百度一下,你就知道
20211108 14:52:27.426 : INFO : Typing text 'robotframework学习' into text field 'id=kw'.
20211108 14:52:27.842 : INFO : Clicking button 'id=su'.
20211108 14:52:29.741 : INFO : ${a} = robotframework学习_百度搜索
20211108 14:52:29.742 : INFO : robotframework学习_百度搜索
20211108 14:52:29.745 : INFO : ${width} = 1295
20211108 14:52:29.745 : INFO : ${height} = 695
20211108 14:52:29.746 : INFO : 1295
20211108 14:52:29.747 : INFO : 695
20211108 14:52:31.760 : INFO : Slept 2 seconds
Ending test: Test Project.Test Suit.baidu_search
获得文本信息进行比较

测试结果:

Starting test: Test Project.Test Suit.baidu_search
20211108 15:17:03.377 : INFO : Opening browser 'firefox' to base url 'https://www.baidu.com'.
20211108 15:17:03.379 : INFO : Firefox driver log is always forced to to: C:\Users\yzp\AppData\Local\Temp\RIDE_x45edr9.d\geckodriver-17.log
20211108 15:17:10.732 : INFO : ${title} = 百度一下,你就知道
20211108 15:17:10.754 : INFO : Typing text 'robotframework学习' into text field 'id=kw'.
20211108 15:17:11.217 : INFO : Clicking button 'id=su'.
20211108 15:17:19.166 : INFO : Slept 5 seconds
20211108 15:17:19.189 : INFO : ${text} = 帮助
20211108 15:17:19.194 : INFO : ${width} = 1295
20211108 15:17:19.194 : INFO : ${height} = 695
20211108 15:17:19.195 : INFO : 1295
20211108 15:17:19.205 : INFO : 695
20211108 15:17:21.209 : INFO : Slept 2 seconds
Ending test: Test Project.Test Suit.baidu_search

3.14 表单嵌套

有时候和页面中会出现表单嵌套,这个时候需要进入到表单才能操作相关元素。

Select Frame 进入表单,Xpath=//* [@] 表示定位要进入的表单。

Unselect Frame 退出表单。

3.15 下拉框选择

Unselect From List By Value 关键字用天选择下拉框。
Xpath=//* [@] 定位下拉框;
Vlaue 选择下拉框里的属性值。

3.16 执行 JavaScript

在一些特殊的情况下需要调用 JavaScript 代码。

Execute Javascript 关键字用于使用 JavaScript 代码

四、Robot Framework 分层设计

  谈到 Robot Framework 分层的思想,就不得不提“关键字驱动”。
  回到分层的思想上,在程序设计的讲究设计模式,设计模式其实就是根据需求使用抽象与封装,其实就是分层思想。把一个实现过程分成不同多层。提高的灵活性,从而达到可扩展性和可维护性。
  再回到自动化的话题上,我们可以把操作步骤封装一个一个的方法(关键字),通过调用关键字来实现测试用例。
  参考前面创建的一条百度搜索的测试用例。

1、创建资源

右键“测试项目”选择“new resource”创建资源。

2、创建关键字

右键“业务关键字”选择“new User Keyword” 来创建用户关键字

输入关键字的名称:

3、编辑关键字

分析:

  对于一个测试用例来说,用户关心的是输入什么内容,得到什么结果。
  所以,对于“百度搜索”关键字来说,需要创建两个接口变量${search}和${result} 两个变量,用于接收输入内容和预期结果。
  点击 Arguments 输入框,定义变量,多个变量从用“|”隔开。
 
  在百度用户中使用参数化变量。

4、添加创建的资源

切换到测试套件(Search)页面,添加资源(业务关键字.txt) 

5、调用关键字

现在就可以在测试用例中使用创建的关键字了(百度搜索)。

  对于每一条用例来说,调用“百度搜索”关键字,输入搜索内容,输入预期结果即可。不同关心用例是如何执行的。如果百度输入框的定位发生了变化,只用去修改“百度搜索”关键字即可,不用对每一条用例做任何修改。大大提高的用例的维护性和扩展性。

  继续分层的设计:

到此,Robot Framework +Selenium 自动化测试粗犷的讲完了。当然还有更多 API 的使用,和细枝末节的设置没有介绍。但我们已经可以拿它来开展自动化工作了。

robot_framewok自动化测试--(8)SeleniumLibrary 库(selenium、元素定位、关键字和分层设计)的更多相关文章

  1. 自动化测试基础篇--Selenium元素定位

    摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...

  2. Selenium3 + Python3自动化测试系列二——selenium元素定位

    一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...

  3. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  4. 彻底学会Selenium元素定位

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/63099961.html 你好,我是测试蔡坨坨. 最近收到不少初学UI自动化测试的小伙伴私信,对于元素的定位还是有些头疼,总 ...

  5. selenium元素定位之css选择器

    在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...

  6. Selenium+Python自动化测试实战(2)元素定位

    1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...

  7. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  8. Python+Selenium - Web自动化测试(二):元素定位

    前言 前面已经把环境搭建好了,现在开始使用 Selenium 中的 Webdriver 框架编写自动化代码脚本,我们常见的在浏览器中的操作都会有相对应的类方法,这些方法需要定位才能操作元素,不同网页的 ...

  9. selenium元素定位篇

    Selenium webdriver是完全模拟用户在对浏览器进行操作,所有用户都是在页面进行的单击.双击.输入.滚动等操作,而webdriver也是一样,所以需要我们指定元素让webdriver进行单 ...

随机推荐

  1. 大前端快闪:package.json文件知多少?

    最近在公司某项目参与了一些前端工作,作为后端抠脚大汉,改点前端细节磕磕绊绊,改点大前端.工程化.HTTP交互倒也还能做到柳暗花明. 于是打算用后端程序猿的视角记录一些{大前端}的知识快闪,也算是帮助读 ...

  2. 自动化测试报告----allure2(一)

    以前都是使用TestNG自带的报告.jenkins中的报告等但没有个性化装饰报告,然而接触过allure2后发现原来报告还可以这么酷,接下来就带大家一起看一下allure2 报告炫在哪里? 我们先看如 ...

  3. CF280C-Game on Tree【数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/CF280C 题目大意 \(n\)个点的一棵树,每次选择一个没有染色的点把它和它的子树染黑,求期望全部染黑的步数. 解 ...

  4. IdentityServer4[4]使用密码保护API资源

    使用密码保护API资源(资源所有者密码授权模式) 资源所有者(Resource Owner)就是指的User,也就是用户.所以也称为用户名密码模式.相对于客户端凭证模式,增加了一个参与者User.通过 ...

  5. Chrome浏览器启动参数大全(命令行参数)

    前言 在开发Web项目当中,浏览器必不可少,而浏览器的启动参数可以帮我们实现很多功能. 常用参数 常用参数请参考下表. 序号 参数 说明 1 --allow-outdated-plugins 不停用过 ...

  6. Windows 10、Windows Server 定时任务(定时关机)

    前言 在测试过程中,有些测试机每天都需要关机,一台台很麻烦,于是想起了Windows的任务计划程序,想着试一试,就将具体过程记录一下. 过程 Windows 搜索任务计划程序 创建任务(不要选错了) ...

  7. Django整理(三) - 配置文件&静态文件

    项目常用配置 在项目的 setting.py 配置文件中,进行项目相关配置的修改. 1. BASE_DIR 当前项目的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路 ...

  8. 在Unity中渲染一个黑洞

    在Unity中渲染一个黑洞 前言 N年前观看<星际穿越>时,被其中的"卡冈图雅"黑洞所震撼.制作团队表示这是一个最贴近实际的黑洞效果,因为它是通过各种科学理论实现的.当 ...

  9. 【vscode高级玩家】Visual Studio Code❤️安装教程(最新版🎉教程小白也能看懂!)

    目录 如果您在浏览过程中发现文章内容有误,请点此链接查看该文章的完整纯净版 下载 Linux Mac OS 安装 运行安装程序 同意使用协议 选择附加任务 准备安装 开始安装 安装完成 如果您在浏览过 ...

  10. keeplived高可用配置

    前提:关闭防火墙,关闭selinux 1.主备配置 主 vim keeplived-lb01.confglobal_defs { router_id LVS_01 } vrrp_instance VI ...