Robot Framework自动化测试(二)---元素定位

说明:

   不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API。比如笔者所处工作中,更多的是拿Robot framework来做数据库的接口测试,当然,需要先将相关的数据库包导入。

那么测试框架的本质是什么?个人觉得有以下几个方面。

1、比较

测试实质就是“比较”,在测试之前需要先写用例,假设经过各种操作之后会得到一个预期的结果,然后,在测试的过程中按照用例的步骤会得到一个实际的结果,拿实际结果与预期结果比较。从而且进一步判断用例的成功与失败。

2、用例的组织

为什么要组职用例,因为用例有很多条,我们或在一个文件中写多条用例,或多个文件中写多条用例,总之要很好的把这些用例组织起,自动化用例是给程序去跑的,所以,更应该规范的组织起来。

3、执行结果展示

用例跑完了,成功了,失败了?用例执行到哪一步失败了?总要把这些信息展示给用户吧。

=============

回到主题,在Robot framework中元素的定位。

  因为Robot framework 引入的selenium2 包,所以,假如我们学过selenium 的话,定位是一样的。因为没找到相关资料,所以,经过验证id 、name ,xpath 、css 四种定位方式是可以的,尤其后两种是“万能的”,所以可以解决99%的定位问题。

 

id 和name 定位                                     

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

百度搜索框和搜索按钮

……
<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
……
<input id="su1" class="bg s_btn" type="submit" onmouseout="this.className='bg s_btn'" onmousedown="this.className='bg s_btn s_btn_h'" value="百度一下">
……

根据上面的例子,百度输入框可以取id 或 name进行定位。(前提是id和name的值在当页面上唯一)

id = kw1

name = wd

在Robot framework 中就是这样写的:


Input Text


id=kw1


robot framework学习


input text


name=wd


robot framework学习

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

 

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

Id=su1


Click Button


id=su1


 

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

 

 

xpath定位                               

  假如,一个人没身份证号没名字怎么找呢?想想你是怎么找朋友吃饭的,他手机不通,电话不回呢?直接上他家去呗,那你一定有他家住址,xx市xx区xx路xx号。Xpath 就可以通过这种层级关系找到元素。

来看看百度输入框在整个页面上的位置吧:

<html>
    <head>
    <body link="#0000cc">
    <div id="wrapper" style="display: block;">
        <div id="debug" style="display:block;position:absolute;top:30px;right:30px;border:1px solid;padding:5px 10px;"></div>
        <div id="u">
        <div id="head">
        <div id="content" style="display: block;">
            <div id="u1" style="display: block;">
            <div id="m">
                <p id="lg">
                <p id="nv">
                <div id="fm">
                    <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" autocomplete="off">

 

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" autocomplete="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 中的写法:


Input Text


xpath = //*[@id=’kw1’]


robot framework学习


input text


xpath = //span[@class=’bg s_ipt_w’]/input

 


robot framework学习


input text


xpath = //input[@id=’kw1’ and @name=’wd’]

 


robot framework学习

 

 

CSS定位                           

   Css的定位更灵活,因为他它用到的更多的匹配符和规格。

http://www.w3school.com.cn/cssref/css_selectors.asp


选择器


例子


例子描述


.class


.intro


选择 class="intro" 的所有元素。


#id


#firstname


选择 id="firstname" 的所有元素。


*


*


选择所有元素。


element


p


选择所有 <p> 元素。


element,element


div,p


选择所有 <div> 元素和所有 <p> 元素。


element element


div p


选择 <div> 元素内部的所有 <p> 元素。


element>element


div>p


选择父元素为 <div> 元素的所有 <p> 元素。


element+element


div+p


选择紧接在 <div> 元素之后的所有 <p> 元素。


[attribute]


[target]


选择带有 target 属性所有元素。


[attribute=value]


[target=_blank]


选择 target="_blank" 的所有元素。


[attribute~=value]


[title~=flower]


选择 title 属性包含单词 "flower" 的所有元素。


[attribute|=value]


[lang|=en]


选择 lang 属性值以 "en" 开头的所有元素。

 

同样以百度输入框的代码,我们来看看CSS如何定位。

<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" autocomplete="off">

id定位:

css=#kw1

class定位:

css=.s_ipt

其它属性:

css=[name=wd]

css=[type=text]

css=[autocomplete=off]

父子定位:

css=span > input

css=form > span > input

根据标签名定位:

css=input

 

Robot framework 中的写法:


Input Text


css=#kw1


robot framework学习


input text


css=.s_ipt


robot framework学习


input text


css=[name=wd]


robot framework学习

 

  同样一个元素,根基CSS的不同规则,可能有几十上百种写法。CSS更灵活强大,但是相比xpath 的学习成本为更高。但是css和xpath 两种定位方式是一定要学会一种,不然你的自动化工作更无法开展。

 

 

时间: 2025-01-26 13:30:23

Robot Framework自动化测试(二)---元素定位的相关文章

Robot Framework自动化测试(三)---Selenium API

Robot  Framework  Selenium  API   说明:    此文档只是将最常用的UI 操作列出.更多方法请查找selenium 关键字库.       一.浏览器驱动   通过不同的浏览器执行脚本.   Open Browser Htpp://www.xxx.com chrome   浏览器对应的关键字: firefox FireFox ff internetexplorer   Internet Explorer ie googlechrome   Google Chro

Robot Framework自动化测试(五)--- 开发系统关键字

最近一直在用robot framework 做自动化测试项目,老实说对于习惯直接使用python的情况下,被框在这个工具里各种不爽,当然,使用工具的好处也很多,降低了使用成本与难度:当然,在享受工具带来便利的同时也会受制于工具.对于特定的需求,工具没提供相关的Library和关键字的时候,就只能放弃了. 还好robot framework提供了 Evaluate 关键字,对于Evaluate 关键字的使用等有时间再讲.当robot framework 不能解决需求,我是直接写个.py 程序,通过

Robot Framework自动化测试 ---视频与教程免费分享

当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种"填表格"式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以自由开发系统关键字.那我说,你不能让我用我就用,我要先用用看.自从我用了半年多以来,duang~! 真的挺好用的.duang~! ,我相信我用完是这个样子,你们用完也是这个样子.duang~! duang~!    ----今年流行"duang",我也来一段.哈哈~!

Robot Framework自动化测试(一)---第一个脚本(转)

最近工具中用Robot Framework框架来做自动化,所以,花时间学习了一下.   =======所需环境=================== Python: https://www.python.org/ RF框架是基于python 的,所以一定要有python环境.   Robot framework : https://pypi.python.org/pypi/robotframework/2.8.5 这个不是解释了,RF框架.虽然在做基于UI的自动化时,它展现出来的很像QTP,我之

Robot Framework自动化测试(一)---第一个脚本

最近工具中用Robot Framework框架来做自动化,所以,花时间学习了一下.   =======所需环境=================== Python: https://www.python.org/ RF框架是基于python 的,所以一定要有python环境.   Robot framework : https://pypi.python.org/pypi/robotframework/2.8.5 这个不是解释了,RF框架.虽然在做基于UI的自动化时,它展现出来的很像QTP,我之

Robot Framework自动化测试(七)--- jybot模式

  虽然,很久不用关于Robot Framework框架了,但我这里应该是除了@齐涛-道长之外分享Robot Framework 相关资料比较多的地方了.所以,常常被问到一些关于该框架的问题. 虽然,我一直坚信该框架的无比强大和简单好用,并且,会越发展越来好.但是,对于习惯了直接写代码的自由,很难在回头用它,但这并不妨碍我对该框架的关注! 本篇介绍一下如何使用Robot Framework的Jybot 模式.   安装环境: ================ Python : robot fra

Robot Framework自动化测试(六)--- robotremoteserver使用

robotremoteserver 是什么?   Python Remote Server for Robot Framework  下载地址:https://pypi.python.org/pypi/robotremoteserver/   robotremoteserver是一种远程库接口技术(remote library interface).其实,通过这两天的使用,我的理解它就是一个远程库的容器.这看上去有点不太好理解,我们知道当我要使用的Robot Framework的库是被安装在..

[原][自动化测试]Robot Framework Selenium基本使用

Robot Framework Selenium基本使用 首先要说一下,一切和Robot Framework相关的资料都可以通过官方 http://code.google.com/p/robotframework/ 查询学习. 一.工具基本安装 准备条件: 1.Python语言及库,环境变量等: a) 准备文件:python-2.7.4.amd64.msi b) 基本安装:最好保持C盘默认路径,方便后面安装 c) 基本配置:环境变量配置很简单:path中添加安装目录,默认路径的话是C:\Pyth

不得不说--自动化测试元素定位与用例设计

  关于自动化测试,经常被问到元素的定位 与 如何设计用例. 很多时间我也帮不了你解决实际的问题,只能从个人脚本谈谈如何看待这些问题.   不得不说之元素定位   虽然,本章写了十几篇文章来讲元素的定位与操作,对于碰到的一些常见功能,如何通过技巧来定位它们,但是在实际的自动化脚本开发中,不管是新手还是具有一定经验的老手,我们面临最多的问题仍然是元素的定位问题. 有时间元素定位非常简单,例如,我们只要知道这个元素有的id和name 就可以轻松的来定位到它:有时间元素的定位却非常的令人非常头疼,尽管