Robot Framework学习笔记7-Selenium 元素定位
1、id 和 name 定位
以百度的搜索框为例:
根据图片,我们可以看到百度输入框可以取 id 或 name 进行定位。(前提是 id 和 name 的值在当页面上唯一)
id = kw
name = wd
在 Robot framework 中就是这样写的:
Input text 用于输入框的关键字,“robot framework 学习”是要给输入框输入的内容。
百度按钮只 id 数据可以利用:
id=su
Click Button 是按钮点击的关键字。
2、xpth定位
来看看百度输入框在整个页面上的位置吧:
<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">
Xpath = /html/body/div[1]/div[4]/div[2]/div/form/span[1]/input
我们可以从最外层开始找,html 下面的 body 下面的 div 下面的第 4 个 div 下面的....input 标签。通过
一级一级的锁定就找到了想要的元素。
2.2、Xpth的相对路径:
Xpath 同样可以利用元素自身的属性:
Xpath = //*[@id=’kw’]
//表示某个层级下,*表示某个标签名。@id=kw1 表示这个元素有个 id 等于 kw 。
当然,一般也可以制定标签名:
Xpath = //input[@id=’kw’]
元素本身,可以利用的属性就不只局限为于 id 和 name ,如:
Xpath = //input[@type=’text’]
Xpath = //input[@autocomplete=’off’]
但要保证这些元素可以唯一的识别一个元素。
2.3、找上级:
元素的上级属性为:
<form id="form1" class="fm" action="/s" name="f1">
<span class="bg s_ipt_wr">
<input id="kw" 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 ,那么就是一个绝对路径了。
Robot framework 中的写法:
3、css定位
同样以百度输入框的代码,我们来看看 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">
class 定位:css=.s_ipt
其它属性:css=[name=wd]
css=[type=text]
css=[autocomplete=off]
父子定位:css=span > input
css=form > span > input
根据标签名定位:css=input
Robot framework 中的写法:
同样一个元素,根基 CSS 的不同规则,可能有几十上百种写法。CSS 更灵活强大,但是相比 path 的
学习成本为更高。但是 css 和 xpath 两种定位方式是一定要学会一种,不然你的自动化工作更无法开展。