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

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

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

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

\,vfjCWH$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软件测试网~3Q oY}
这个报错意思是说定位语法错了。51Testing软件测试网%Z+a NC5y+qov8K
 51Testing软件测试网;H/`/?_$Gq UVp
一、定位带空格的class属性
g By6lz-`6j P01.以126邮箱为例:http://mail.126.com/,定位账号输入框
k w wz8U$j0

wVJH8SV0?x [0

0P!d8q;Lp/s|;o7S7d02.如果直接复制过来用class属性定位是会报错的51Testing软件测试网4l)aa q/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![`)|;]8lc0

9bS3Q4z8p+YNh02.想补习html基础知识的可以参考菜鸟教程:http://www.runoob.com/html/html-attributes.html51Testing软件测试网,yd_y-]

51Testing软件测试网mlDds"Z_P-~

 
f,a;p IW0三、class定位
};VMeQ*mQ#RU01.既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="j-inputtext dlemail",取j-inputtext 和dlemail都是可以的,这样这个class属性在页面上唯一就行
51Testing软件测试网_\ gB9F%a4l9l7JN

(D4I?zR[02.那么问题来了:如何才知道这个元素的某个属性是不是在页面上是唯一的呢?

#\*H9K]o t0

C'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:dIHw7I

51Testing软件测试网sTb9t {f
51Testing软件测试网6CQ'sUD u8J${^

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属性的其中一个属性(页面上唯一的)来定位,定位方法是灵活多变的

V2n CCm0

*e1I?(aeP_0
8[Ls.]+pf,U0

"~)Yj.rA)AP0

W)o&Yly1L2\0七、参考代码

c)i4N0z Y@ {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")
s zQ|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")

TAG:

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

评分:0

我来说两句

Open Toolbar