一、层级定位(二次定位)
在实际测试过程中,一个页面可能有多个属性基本相同的元素,如果要定位到其中的一个,这时候需要用到层级定位。先定位其父元素,然后再通过父元素定位该元素。
示例:通过层级定位搜狗输入框
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'https://www.sogou.com/')
form_element = driver.find_element_by_id('sf') # 获取form表单元素
form_element.find_element_by_id('query').send_keys('selenium') # 通过表单定位输入框
form_element.find_element_by_id('stb').click() # 通过表单定位搜索按钮
time.sleep(3)
driver.quit()
如上代码,我们先定位到了form表单,然后通过表单定位下面的输入框与按钮。
注意:上面示例只通过两层定位到了元素,层级定位不一定定位两次,我们可以定位多次。
二、定位一组元素
而当我们需要获取多个属性相同的对象,并且需要批量操作该对象时,就会使用find_elements定位一组元素。
创建以下html文件,文件名checkbox.html
<form class="form-horizontal">
<div class="control-group">
<label class="controllabel" for="China">中国人</label>
<div class="controls">
<input type="checkbox" id="China"/>
</div>
</div>
<div class="control-group">
<label class="controllabel" for="American">美国人</label>
<div class="controls">
<input type="checkbox" id="American"/>
</div>
</div>
<div class="control-group">
<label class="controllabel" for="German">德国人</label>
<div class="controls">
<input type="checkbox" id="German"/>
</div>
</div>
<div class="button">
<input type="submit" id="submit"/>
</div>
</form>
示例:全选上面的多选框
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'E:\xxx\checkbox.html') # 打开checkbox.html文件,使用绝对地址
checkboxs = driver.find_elements_by_xpath('//input[@type="checkbox"]') # 获取批量的对象
for checkbox in checkboxs: # 循环控制
if not checkbox.is_selected(): # 判断多选框是否被选中
checkbox.click() # 单击
time.sleep(3)
driver.quit()
三、综合运用
当我们需要定位一组元素时,页面上相似的元素会很多,这时我们需要和层级一定一起使用。先定位到该组元素的父元素,然后通过父元素定位其子孙元素。
示例1:获取搜狗微信页面搜索热词的内容
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://weixin.sogou.com/')
topele = driver.find_element_by_id('topwords') # 搜索热词的父元素
tops = topele.find_elements_by_tag_name('a') # 二次批量定位热词元素
for top in tops: # 循环获取元素
print(top.text) # 打印文本内容
driver.quit()
UI自动化测试中对于表格的定位是个难点,怎么样快速获取表格数据,请看下面几个示例。
示例2:定位表格获取表头
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://www.w3school.com.cn/cssref/css_selectors.asp')
# //table[@class="dataintable"]//tr[1]//th 获取表头元素
table_header = driver.find_elements_by_xpath('//table[@class="dataintable"]//tr[1]//th')
for header in table_header: # 循环获取元素
print(header.text) # 打印文本内容
driver.quit()
示例3:定位表格第二列数据内容
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://www.w3school.com.cn/cssref/css_selectors.asp')
# //table[@class="dataintable"]//tr[y]//td[x] y第几条记录,x第几列数据
# //table[@class="dataintable"]//tr//td[2] 获取第二列数据
table_header = driver.find_elements_by_xpath('//table[@class="dataintable"]//tr//td[2]')
for header in table_header: # 循环获取元素
print(header.text) # 打印文本内容
driver.quit()
示例4:获取表格中所有的数据
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://www.w3school.com.cn/cssref/css_selectors.asp')
# //table[@class="dataintable"]//tr 定位所有行
tables = driver.find_elements_by_xpath('//table[@class="dataintable"]//tr')
for tr in tables: # 循环每行元素
for td in tr.find_elements_by_tag_name('td'): # 循环获取列
print(td.text, end='\t\t')
print('\n')
driver.quit()
定位表格,采用find_elements 组定位,使用xpath=//table//tr[y]//td[x](y第几条记录,x第几列数据),当y或者x其中一个没有值时定位一行或一列。下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础
获取方式 :