selenium自动化测试入门 —— 层级定位与定位一组元素

一、层级定位(二次定位)

在实际测试过程中,一个页面可能有多个属性基本相同的元素,如果要定位到其中的一个,这时候需要用到层级定位。先定位其父元素,然后再通过父元素定位该元素。

示例:通过层级定位搜狗输入框


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其中一个没有值时定位一行或一列。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值