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

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

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

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

51Testing软件测试网,SNP&\(h

前言
nkv2}z4K0有些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 permitted
WuYPn-d\0这个报错意思是说定位语法错了。51Testing软件测试网7LN.N@Z s+z+x
 51Testing软件测试网Rg;q%W0q
一、定位带空格的class属性51Testing软件测试网i-Aa}9suMA_W
1.以126邮箱为例:http://mail.126.com/,定位账号输入框
%TT2Y [0K-v(^L0

w7t7l U~3Iax_l0

:N,@*W2@g0lh#g02.如果直接复制过来用class属性定位是会报错的51Testing软件测试网DQl S Z3ec,|

51Testing软件测试网 |.Fr ]8X5a+I


wkDr\QL^ z051Testing软件测试网u a7qoo:j7C

{G j ?(Ik051Testing软件测试网bO-c1vrx"M

二、class属性科普51Testing软件测试网 _1wS)S\2FOr1Kr
1.class属性中间的空格并不是空字符串,那是间隔符号,表示的是一个元素有多个class的属性名称,在整个HTML文档,使用CSS中的同一个class类可能是一个或多个!51Testing软件测试网+v9iA D2q
(class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没多个属性的)

:r } jM8vJ s3C\0

B&~^|`#o W02.想补习html基础知识的可以参考菜鸟教程:http://www.runoob.com/html/html-attributes.html

I/t#m H!bX b0

*NdVtP~0 
.~/FIIQ4U0三、class定位51Testing软件测试网+A1} BYgg+@ j/_
1.既然知道class属性有空格是多个属性了,那定位的时候取其中的一个就行(并且要唯一),也就是说class="j-inputtext dlemail",取j-inputtext 和dlemail都是可以的,这样这个class属性在页面上唯一就行
51Testing软件测试网%MM }"vm

I.^ \?_02.那么问题来了:如何才知道这个元素的某个属性是不是在页面上是唯一的呢?

!U)C/m{$b"t051Testing软件测试网V QM }9i0|Mu4[j z

 
G? ^ T2T,t]0四、判断元素唯一性51Testing软件测试网"o!U4z5x E0sET3L J
1.F12切换到HTML界面,在搜索框输入关键字搜索,如:j-inputtext,然后按回车搜索,看页面上有几个class属性中有j-inputtext这个属性的,就知道是不是唯一的了。
51Testing软件测试网:X&o1j'F6Mjquc p&L

51Testing软件测试网fW2L;hT$m

51Testing软件测试网W(y+I+oA-k,yN-Q
51Testing软件测试网g7bi-N @ u9s0P

|+S(Tx9}/BF0五、class属性不唯一怎么办
D cICA_ Y01.如果这个class的多个属性都不是唯一的咋办呢,元素不唯一也不用怕,可以用复数定位,把所有的相同元素定位出来,按下标取第几个就行。

y]FPG0

3z2BAs9UR0

;w\mR4v0六、css定位
4v!n[&zF/fcKx j$_01.css来定位class属性的元素前面加个点(.)就行,然后空格变成点(.)就能定位了51Testing软件测试网c1|P;H B }7V EQ
2.当然css也可以取class属性的其中一个属性(页面上唯一的)来定位,定位方法是灵活多变的
51Testing软件测试网vb]*jW9c&y3J

XI1\:GrI"X v051Testing软件测试网 Q.E&P/|-C#lv

5b@ K B e4gUB3l4w051Testing软件测试网'dmH-Ts"n7O

七、参考代码51Testing软件测试网U7C!X-qi8Vkg

# coding:utf-8
&`oS:\3PNt0
fromseleniumimportwebdriver
B_+t ~GA-Q\051Testing软件测试网TmA6T G
driver = webdriver.Firefox()51Testing软件测试网 ?U S Ny7c#V
driver.get("http://mail.126.com/")
4O7L N5k`F1L0driver.switch_to.frame("x-URS-iframe")51Testing软件测试网&P:D7i%\yV z
# 方法一:取单个class属性
}%{1|C s0tDS0
driver.find_element_by_class_name("dlemail").send_keys("yoyo")
Jyvb1Z0driver.find_element_by_class_name("dlpwd").send_keys("12333")
u2w][cfU%j|0K0# 方法二:定位一组取下标定位(乃下策)51Testing软件测试网PW E XqE][;o
# driver.find_elements_by_class_name("j-inputtext")[0].send_keys("yoyo")
4T@ cx#Jn]%N0
# driver.find_elements_by_class_name("j-inputtext")[1].send_keys("12333")51Testing软件测试网F x`%p6w[w^
# 方法三:css定位51Testing软件测试网%D&O%O(X Bn
# driver.find_element_by_css_selector(".j-inputtext.dlemail").send_keys("yoyo")
Q:mA[$Z Cp0
# driver.find_element_by_css_selector(".j-inputtext.dlpwd").send_keys("123")51Testing软件测试网w!HXg6p@
# 方法四:取单个class属性也是可以的51Testing软件测试网d:m W+q:Ic
# driver.find_element_by_css_selector(".dlemail").send_keys("yoyo")
5s'B9t K^m3lD0
# 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