2.33 定位的坑:class属性有空格
\,vfj CWH$v0前言
0\{&I)s'o#w0有些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软件测试网~3QoY}
这个报错意思是说定位语法错了。51Testing软件测试网%Z+aNC5y+qo v8K
51Testing软件测试网;H/`/?_$Gq
UVp
一、定位带空格的class属性
g By6lz-`6jP01.以126邮箱为例:http://mail.126.com/,定位账号输入框
k w wz8U$j0
wVJH8SV0?x [00P!d8q;Lp/s|;o7S7d02.如果直接复制过来用class属性定位是会报错的51Testing软件测试网4l)aaq/E
51Testing软件测试网(Nh%[#U r
?v4\51Testing软件测试网x5R~ax9J#Wc
s
inv,z!A7@051Testing软件测试网Jn6?ub Pn g#A
51Testing软件测试网tv!]
A+M二、class属性科普
#F.JnAW\w
b01.class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素有多个class的属性名称,在整个HTML文档,使用CSS中的同一个class类可能是一个或多个!51Testing软件测试网%jk-W)Kt)L
(class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没多个属性的)
5g(P7a![`)|;]8lc09bS3Q4z8p+YN h02.想补习html基础知识的可以参考菜鸟教程:http://www.runoob.com/html/html-attributes.html51Testing软件测试网,yd_y-]
51Testing软件测试网mlDds"Z_P-~
f,a;pIW0三、class定位
};VMeQ*mQ#RU01.既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="j-inputtext dlemail",取j-inputtext 和dlemail都是可以的,这样这个class属性在页面上唯一就行51Testing软件测试网_\ gB9F%a4l9l7JN
(D4I?zR[02.那么问题来了:如何才知道这个元素的某个属性是不是在页面上是唯一的呢?
#\*H9K]o t0C'u8t+_t0
p)RCADl5U0Hv/r:R;R0四、判断元素唯一性51Testing软件测试网E2}oCA
1.F12切换到HTML界面,在搜索框输入关键字搜索,如:j-inputtext,然后按回车搜索,看页面上有几个class属性中有j-inputtext这个属性的,就知道是不是唯一的了。51Testing软件测试网0`C&W:S'v:N
i'h%W
51Testing软件测试网q1^,r2B:dIHw7I51Testing软件测试网sTb9t{f
51Testing软件测试网6CQ'sUDu8J${^
51Testing软件测试网f)Of0qox3l6b)_C2K\五、class属性不唯一怎么办
VUD7Y_ IgS01.如果这个class的多个属性都不是唯一的咋办呢,元素不唯一也不用怕,可以用复数定位,把所有的相同元素定位出来,按下标取第几个就行。51Testing软件测试网`H:}7]*\Sc
6Y4u+WfgElA$N0
M+n#k,y#r0六、css定位51Testing软件测试网Znmbm$F(s
1.css来定位class属性的元素前面加个点(.)就行,然后空格变成点(.)就能定位了51Testing软件测试网:HUAwvC.HW
2.当然css也可以取class属性的其中一个属性(页面上唯一的)来定位,定位方法是灵活多变的
V2nCCm0*e1I?(aeP_0
8[Ls.]+pf,U0
"~)Yj.rA)AP0W)o&Yly1L2\0七、参考代码
c)i4N0zY@ {0# coding:utf-851Testing软件测试网*wU9g'a/[G\7B'Y
fromseleniumimportwebdriver51Testing软件测试网MS,nvp(b`6^
U$tq j!R/go-\
?0driver = webdriver.Firefox()51Testing软件测试网d[)\M Z5Mk1W@
driver.get("http://mail.126.com/")51Testing软件测试网-?-J0v,~H?!k(BN
driver.switch_to.frame("x-URS-iframe")
j"}f3jr
A |9X0# 方法一:取单个class属性51Testing软件测试网v/{!b Se
driver.find_element_by_class_name("dlemail").send_keys("yoyo")
szQ |Ex0driver.find_element_by_class_name("dlpwd").send_keys("12333")
{pa-MKO0# 方法二:定位一组取下标定位(乃下策)
0n&_]5E4@!\;psM
_0# driver.find_elements_by_class_name("j-inputtext")[0].send_keys("yoyo")
;N%_;o%ske.y0# driver.find_elements_by_class_name("j-inputtext")[1].send_keys("12333")
GOFR5G2J0# 方法三:css定位51Testing软件测试网I cO8@*t;^7Jo%U:C,x'_
# driver.find_element_by_css_selector(".j-inputtext.dlemail").send_keys("yoyo")51Testing软件测试网&_:x\/n:f;M'w
# driver.find_element_by_css_selector(".j-inputtext.dlpwd").send_keys("123")
{#~)GX]W0# 方法四:取单个class属性也是可以的51Testing软件测试网*[ ~TPhb
# driver.find_element_by_css_selector(".dlemail").send_keys("yoyo")51Testing软件测试网(l4U o2pFHk
# driver.find_element_by_css_selector(".dlpwd").send_keys("123")