发表于: 2019-11-20 22:36:57
0 615
今天完成的事情:
明天计划的事情:
遇到的问题:暂无
收获:
1. 由父节点定位子节点
最简单的是由父节点定位子节点了,我们有很多方法可以定位,下面举个例子:
对以下代码:
<html><body><div id="A"> <!--父节点定位子节点--> <div id="B"> <div>parent to child</div> </div></div></body></html>想要根据 B节点 定位无id的子节点,代码示例如下:
# -*- coding: utf-8 -*-from selenium import webdriver driver = webdriver.Firefox() driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')# 1.串联寻找print driver.find_element_by_id('B').find_element_by_tag_name('div').text# 2.xpath父子关系寻找print driver.find_element_by_xpath("//div[@id='B']/div").text# 3.css selector父子关系寻找print driver.find_element_by_css_selector('div#B>div').text# 4.css selector nth-childprint driver.find_element_by_css_selector('div#B div:nth-child(1)').text# 5.css selector nth-of-typeprint driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text# 6.xpath轴 childprint driver.find_element_by_xpath("//div[@id='B']/child::div").text driver.quit()结果:
parent to childparent to childparent to childparent to childparent to childparent to child第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等
2. 由子节点定位父节点
由子节点想要定位到父节点就有点难度了,对以下代码:
<html><body><div id="A"> <!--子节点定位父节点--> <div> <div>child to parent <div> <div id="C"></div> </div> </div> </div></div></body></html>我们想要由 C节点 定位其两层父节点的div,示例代码如下:
# -*- coding: utf-8 -*-from selenium import webdriver driver = webdriver.Firefox() driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')# 1.xpath: `.`代表当前节点; '..'代表父节点print driver.find_element_by_xpath("//div[@id='C']/../..").text# 2.xpath轴 parentprint driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div").text driver.quit()结果:
child to parent child to parent这里我们有两种办法,第1种是 .. 的形式,就像我们知道的,. 表示当前节点,.. 表示父节点;第2种办法跟上面一样,是xpath轴中的一个:parent,取当前节点的父节点。
评论