xpath——⽗⼦、兄弟、相邻节点定位⽅式详解转载最后发布于2019-06-15 20:47:17 阅读数 1215  收藏
1. 由⽗节点定位⼦节点
最简单的肯定就是由⽗节点定位⼦节点了,我们有很多⽅法可以定位,下⾯上个例⼦:对以下代码:
1.
<html>
2.
<body>
3.
<div id="A">
4.
<!--⽗节点定位⼦节点-->
5.
<div id="B">
6.
<div>parent to child</div>
7.
</div>
8.
</div>
9.
</body>
10.
</html>
1
想要根据 B节点定位⽆id的⼦节点,代码⽰例如下:
1.
# -*- coding: utf-8 -*-
2.
from selenium import webdriver
3.
4.
driver = webdriver.Firefox()
5.
<('D:\\py\\AutoTestFramework\\src\\others\\test.html')
6.
7.
# 1.串联寻
8.
print driver.find_element_by_id('B').find_element_by_tag_name('div').text
9.
10.
# 2.xpath⽗⼦关系寻
11.
print driver.find_element_by_xpath("//div[@id='B']/div").text
12.
13.
# 3.css selector⽗⼦关系寻
14.
print driver.find_element_by_css_selector('div#B>div').text
15.
16.
# 4.css selector nth-child
17.
print driver.find_element_by_css_selector('div#B div:nth-child(1)').text
18.
19.
# 5.css selector nth-of-type
20.
print driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text
21.
22.
# 6.xpath轴 child
23.
print driver.find_element_by_xpath("//div[@id='B']/child::div").text
24.
25.
driver.quit()
1
结果:
1.
parent to child
2.css兄弟选择器
parent to child
3.
parent to child
4.
parent to child
5.
parent to child
6.
parent to child
1
第1到第3都是我们熟悉的⽅法,便不再多⾔。第4种⽅法⽤到了css选择器:nth-child(n),该选择器返回第n个节点,该节点为div标签;第5种⽅法⽤到了另⼀个css选择器:nth-of-type(n),该选择器返回第n个div标签,注意与上⼀个选择器的区别;第6种⽅法⽤到了xpath轴 child,这个是xpath默认的轴,可以忽略不写,其实质是跟⽅法2⼀样的。
当然,css中还有⼀些选择器是可以选择⽗⼦关系的如last-child、nth-last-child等,感兴趣可以⾃⾏百度,有机会博主会讲讲css selector。
2. 由⼦节点定位⽗节点
由⼦节点想要定位到⽗节点就有点难度了,对以下代码:
1.
<html>
2.
<body>
3.
<div id="A">
4.
<!--⼦节点定位⽗节点-->
5.
<div>
6.
<div>child to parent
7.
<div>
8.
<div id="C"></div>
9.
</div>
10.
</div>
11.
</div>
12.
</div>
13.
</body>
14.
</html>
1
我们想要由 C节点定位其两层⽗节点的div,⽰例代码如下:
1.
# -*- coding: utf-8 -*-
2.
from selenium import webdriver
3.
4.
driver = webdriver.Firefox()
5.
<('D:\\py\\AutoTestFramework\\src\\others\\test.html')
6.
7.
# 1.xpath: `.`代表当前节点; '..'代表⽗节点
8.
print driver.find_element_by_xpath("//div[@id='C']/../..").text
9.
10.
# 2.xpath轴 parent
11.
print driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div").text
12.
13.
driver.quit()
1
结果:
1.
child to parent
2.
child to parent
1
这⾥我们有两种办法,第1种是..的形式,就像我们知道的,.表⽰当前节点,..表⽰⽗节点;第2种办法跟上⾯⼀样,是xpath轴中的⼀个:parent,取当前节点的⽗节点。这⾥也是css selector的⼀个痛点,因为css的设计不允许有能够获取⽗节点的办法(⾄少⽬前没有)
3. 由弟弟节点定位哥哥节点
这是第3、第4种情况,我们这⾥要定位的是兄弟节点了。如以下源码:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。