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

2.33 定位的坑:class属性有空格

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

2.33 定位的坑:class属性有空格

fJ)gyi jp:Ir&|{0前言
/V!gJsoV A0有些class属性中间有空格,如果直接复制过来定位是会报错的InvalidSelectorException: Message: The given selector u-label f-dn is either invalid or does not result in a WebElement. The following error occurred: InvalidSelectorError: Compound class names not permitted51Testing软件测试网!t"U8J.L(_
这个报错意思是说定位语法错了。
&{,v k-YL"q0 
} b.X J&M|0一、定位带空格的class属性
2yX/T ?d!g01.以126邮箱为例:http://mail.126.com/,定位账号输入框51Testing软件测试网pn`#Y*VG:v;b?m
51Testing软件测试网%W5P.E M s;R

grCR(i*Z02.如果直接复制过来用class属性定位是会报错的

j S&Dp^ J*AW051Testing软件测试网%b;LA${0jP ~C


(muQ3n,Y#k~;b;b0
*P`2_.wgu9g051Testing软件测试网[S;`5i |7}[]*D

51Testing软件测试网6l"utb?

二、class属性科普
8\'nuc2].K/PC,O.iQ01.class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素有多个class的属性名称,在整个HTML文档,使用CSS中的同一个class类可能是一个或多个!
RA;um2c f+o(Xu[(J0(class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没多个属性的)

~[I8lPYf*P051Testing软件测试网*[,]Mnwn

2.想补习html基础知识的可以参考菜鸟教程:http://www.runoob.com/html/html-attributes.html

O'p${} h8\!~1H051Testing软件测试网3}8tF5Hi

 51Testing软件测试网*M1Z9J)rNXy6l
三、class定位51Testing软件测试网 j,Ye$]jU@F
1.既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="j-inputtext dlemail",取j-inputtext 和dlemail都是可以的,这样这个class属性在页面上唯一就行

3s'WO1fm051Testing软件测试网]IL|ciQ

2.那么问题来了:如何才知道这个元素的某个属性是不是在页面上是唯一的呢?51Testing软件测试网HRG0} wRM?,Z_

,Yt$RW;P0 51Testing软件测试网,An5d.?&MB
四、判断元素唯一性
2j;Q'c(a8y ryO01.F12切换到HTML界面,在搜索框输入关键字搜索,如:j-inputtext,然后按回车搜索,看页面上有几个class属性中有j-inputtext这个属性的,就知道是不是唯一的了。

#z3rR*R|"UPU Q0

+Q@3[8T6Hh hMi051Testing软件测试网v|uS3XK v
51Testing软件测试网Ue;@8B3x.p

51Testing软件测试网$I3N;Sl4p4b'M

五、class属性不唯一怎么办
~TZ:Fp{1k01.如果这个class的多个属性都不是唯一的咋办呢,元素不唯一也不用怕,可以用复数定位,把所有的相同元素定位出来,按下标取第几个就行。

a'`s'E3l]{ W L }0

B bHN%R IQN^#M0

G[/TqrTvje0六、css定位51Testing软件测试网 zI+_N'n xr
1.css来定位class属性的元素前面加个点(.)就行,然后空格变成点(.)就能定位了51Testing软件测试网:^\)GmP
2.当然css也可以取class属性的其中一个属性(页面上唯一的)来定位,定位方法是灵活多变的

Cs;Ge"Hn!x0Fm0

)p[3ct C9r051Testing软件测试网\Rr VQz/h
51Testing软件测试网 i V*T/[ j L

51Testing软件测试网 fI&laRd

七、参考代码

:cT*bCI@0y&C0
# coding:utf-851Testing软件测试网?~U]*Z/l
fromseleniumimportwebdriver
n5I}(M0??0
YCqD5I.Q:X ]0driver = webdriver.Firefox()51Testing软件测试网o%UR @ ['l"sl
driver.get("http://mail.126.com/")
3r'^5e'C^0driver.switch_to.frame("x-URS-iframe")51Testing软件测试网1xN"^L]*[
# 方法一:取单个class属性
1e}:l~ Yt8h{,|0
driver.find_element_by_class_name("dlemail").send_keys("yoyo")
~qS? X.c(a9~0driver.find_element_by_class_name("dlpwd").send_keys("12333")
$?MGox-\GO;h0# 方法二:定位一组取下标定位(乃下策)
pU7{ P(a0
# driver.find_elements_by_class_name("j-inputtext")[0].send_keys("yoyo")51Testing软件测试网l;m0O ?;d|
# driver.find_elements_by_class_name("j-inputtext")[1].send_keys("12333")
Nb1t?,m u6H0
# 方法三:css定位51Testing软件测试网:|#u-BE6T.h/^
# driver.find_element_by_css_selector(".j-inputtext.dlemail").send_keys("yoyo")51Testing软件测试网f:` SI@gp
# driver.find_element_by_css_selector(".j-inputtext.dlpwd").send_keys("123")
2L~|N2e fA+O0
# 方法四:取单个class属性也是可以的51Testing软件测试网X&dH]s*H6s|
# driver.find_element_by_css_selector(".dlemail").send_keys("yoyo")
j+_iz n)F N0
# driver.find_element_by_css_selector(".dlpwd").send_keys("123")

TAG:

神眉八彩玉雉衣 引用 删除 m5433660   /   2018-06-13 08:51:04
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar