测试必须在时间、质量和成本之间获取一个平衡点,这是测试策略和测试设计的价值体现。

2.2 常用8种元素定位(Firebug和firepath)

上一篇 / 下一篇  2018-06-12 10:40:12 / 个人分类:Python+Selenium2 WebDriver API

2.2 常用8种元素定位(Firebug和firepath)

I vZ3H(n-n5G*D0前言   
-X;ft6f$@'f0元素定位在firefox上可以安装Firebug和firepath辅助工具进行元素定位。

3\#N8x4AX'q0


2jFG?v?0t8AQ0V02.2.1 环境准备

51Testing软件测试网1P*W3W Z*C+}Ze

1.浏览器选择:Firefox51Testing软件测试网~[s`z V
2.安装插件:Firebug和FirePath(设置》附加组件》搜索:输入插件名称》下载安装后重启浏览器)51Testing软件测试网 Jk B$IC#L#J8sU7Iw
3.安装完成后,页面右上角有个小爬虫图标
&pz*?.z-K;[:m1c1`04.快速查看xpath插件:XPath Checker这个可下载,也可以不用下载51Testing软件测试网 NEF|QSd
5.插件安装完成后,点开附加组件》扩展,如下图所示51Testing软件测试网z$[4q7eRLc

51Testing软件测试网0P^Ra`|G

mQkpI b051Testing软件测试网!q2z!V ~ X%Fc:t"D

 

E'gT2b @|`/C GPE6j0

2.2.2 查看页面元素

H%o0R+Z9~$HO#hf$g0N0百度搜索框为例,先打开百度网页
V&bK8H5z8m01.点右上角爬虫按钮51Testing软件测试网0@cv.y2J,]9o
2.点左下角箭头51Testing软件测试网/m7yPA.Zyl(G6Y_A
3.将箭头移动到百度搜索输入框上,输入框高亮状态
NGRqnw U(^04.下方红色区域就是单位到输入框的属性:51Testing软件测试网2m'M*w8Am

<inputid="kw"class="s_ipt"type="text"autocomplete="off"maxlength="100"name="wd">

mU*GJE,d YM*f\0

L@lRRq0

2.2.3 find_element_by_id()

j2k_/? o4q"[e01.从上面定位到的元素属性中,可以看到有个id属性:id="kw",这里可以通过它的id属性定位到这个元素。
-Y/i!D'^suU[02.定位到搜索框后,用send_keys()方法,输入文本。51Testing软件测试网h bL&| h-t6}b

51Testing软件测试网*HuT8R2}4F*],@ oGA

51Testing软件测试网8|]'^%s0b {q

2.2.4 find_element_by_name() 

51Testing软件测试网0~)cK{`

   1.从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性单位到这个元素。
3j8X,f:Z$S2` y0    说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框

t s-N n'vb }051Testing软件测试网6t)c8{lk

51Testing软件测试网ue G;K5{.}WPv

2.2.5 find_element_by_class_name()

51Testing软件测试网mS[~l\

1.从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素。

D Y4C!Ixz;j.w051Testing软件测试网i)]wA'dkd

i H t0C$Q$d0

2.2.6 find_element_by_tag_name()

`C3AE&u01.从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input。
0M#~#J%c5Y02.很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考和理解,运行肯定报错。

.o'G:ZkFi051Testing软件测试网Ew9~:A0W#d

51Testing软件测试网;b9e3`g%Nh.H*s

 2.2.7 find_element_by_link_text()

$T)IZ~l K1K01.定位百度页面上"hao123"这个按钮

q uU;UBS |T051Testing软件测试网:_M B4y.n

\)xg$Lm [*e C!H2wb051Testing软件测试网0i/IU qd7R

 

-]i^"e*z(Q [*t)[6A[0

'wD)eZ ]0查看页面元素:

fqvl s/OI-gu'j0
<aclass="mnav"target="_blank"href="http://www.hao123.com">hao123</a>

m1Q4v*ty t02.从元素属性可以分析出,有个href = "http://www.hao123.com

m6G4[AC0U3H6C J*b0

L;l2Rk[/`k0说明它是个超链接,对于这种元素,可以用以下方法:

9cV.i0}{1E$I0

9I4T5H!`mGI0

1Q.SL7Onnf0

 2.2.8 find_element_by_partial_link_text()

sD%Ar0Ra01.有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了

Pe mWB`#{0

6i{)u}$x)g fxg02.如“hao123”,只需输入“ao123”也可以定位到51Testing软件测试网v0| S6T%U'sq

aR0f U^$~ak ~0

n5] bQ M%[0

2.2.9 find_element_by_xpath()

51Testing软件测试网YGDRV

1.以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决。
ABE1H:G s@02.xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath。51Testing软件测试网Pw4S1TZfqsz

51Testing软件测试网YT)[ X1d7mS@D

51Testing软件测试网fPdHU;E7g#P

51Testing软件测试网Ly$BN/c

 51Testing软件测试网$MlG*}[E+ZC

51Testing软件测试网eczQ?

 3.按照上图的步骤,在FirePath插件里copy对应的xpath地址。

!b1n|btl i+c o ?051Testing软件测试网%Ba3^fB'k

W!G$Z2T9X$yu e0

 2.2.10 find_element_by_css_selector()

a2ME1d[9vzz`01.css是另外一种语法,比xpath更为简洁,但是不太好理解。这里先学会如何用工具查看,后续的教程再深入讲解
E OA3of`5[ B?O02.打开FirePath插件选择css51Testing软件测试网;T~ t"c AEi7Vu
3.定位到后如下图红色区域显示

RHcv!W Q7~051Testing软件测试网Q W"R3t"f(^GLp$w{7h

"Kf'u8N9}b051Testing软件测试网9l-C[?V}6Cu

 

OO Se1Yz7V(R051Testing软件测试网v U}'a S#`o1U

总结:51Testing软件测试网pRu&q@h6}
selenium的webdriver提供了18种(注意是18种,不是8种)的元素定位方法,前面8种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活,需要重点掌握其中一个。51Testing软件测试网zt}.huR}
前八种是大家都熟悉的,经常会用到的:

H4Y _#C*Bq:bL0
复制代码
1.id定位:find_element_by_id(self, id_)2.name定位:find_element_by_name(self, name)3.class定位:find_element_by_class_name(self, name)4.tag定位:find_element_by_tag_name(self, name)5.link定位:find_element_by_link_text(self, link_text)6.partial_link定位find_element_by_partial_link_text(self, link_text)7.xpath定位:find_element_by_xpath(self, xpath)8.css定位:find_element_by_css_selector(self, css_selector)
复制代码

?4i)Y2IuLd0这八种是复数形式(2.8和2.27章节有介绍)

{7P"{7@v;V0
复制代码
9.id复数定位find_elements_by_id(self, id_)10.name复数定位find_elements_by_name(self, name)11.class复数定位find_elements_by_class_name(self, name)12.tag复数定位find_elements_by_tag_name(self, name)13.link复数定位find_elements_by_link_text(self, text)14.partial_link复数定位find_elements_by_partial_link_text(self, link_text)15.xpath复数定位find_elements_by_xpath(self, xpath)16.css复数定位find_elements_by_css_selector(self, css_selector
复制代码
51Testing软件测试网*H%U!x.H r#w

这两种是参数化的方法,会在以后搭建框架的时候,会经常用到PO模式,才会用到这个参数化的方法(将会在4.2有具体介绍)

2M3Df8\.L$[0
17.find_element(self, by='id', value=None)18.find_elements(self, by='id', value=None)

TAG:

 

评分:0

我来说两句

Open Toolbar