Selenium 处理下拉框操作

selenium 处理下拉框

在使用selenium来进行自动化测试的时候,常常会需要处理下拉框(很多项目都有下拉框)。所以我们需要知道下拉框是怎么处理的。

一. 基于Webdriver操作处理下拉框

如果是直接通过定位的方法来处理下拉框的话,只需要定位好之后,click就可以了,但是这种方式容易出错。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
ActionChains(driver).move_to_element(driver.find_element_by_link_text("设置")).perform()
driver.find_element_by_link_text("搜索设置").click()
sleep(3)
# 方法:先定位到下拉框,再定位其中的选项
#driver.find_element_by_id("nr").click() # 点击下来框(这行代码都可以不要)
driver.find_element_by_xpath("//*[@id='nr']/option[2]").click()  # 选择下拉框选项
#driver.quit()

二. 通过selenium的Select模块来处理下拉框

1. 导入Select类:
from selenium.webdriver.support.select import Select
2. 下拉框操作的方法:
Select类提供的下来框操作的方法有11种,如下:
在这里插入图片描述
2-1 Select提供了三种选择选项的方法:
select_by_value(‘value’) 通过value值选择
select_by_visible_text(‘text’) 通过文本值选择
select_by_index(index) 通过索引选择,索引从0开始
注意:
index索引是从“0”开始;
value是option标签的一个属性值,并不是显示在下拉框中的值;
visible_text是在option标签中间的值,是文本值;
如百度里面的搜索设置
在这里插入图片描述
2-2 Select提供了三种返回options信息的方法:
options # 返回select元素所有的options,返回列表。
all_selected_options # 返回select元素中所有已选中的选项,返回列表。
first_selected_option # 返回select元素中选中的第一个选项,返回元素。

注意:这三个函数使用时不用传参,不能加()。

2-3 复选select的情况,Select提供了四种取消选中项的方法
deselect_all() # 取消所有已选择的选项。
deselect_by_index(index) # 取消选择索引值为index的选项(索引从0开始)。
deselect_by_value(‘value值’) # 取消选择value属性为value的选项。
deselect_by_visible_text(‘text文本’) # 取消已选中的文本值为text的选项。

注意事项:
1 复选select的情况:select标签中,有一种特殊的select标签,即设置了multiple=”multiple”属性的select,这种select框是可以多选的,你可以通过多次select,选择多个选项,而通过deselect_all()来将他们全部取消。
2 是没有全选的方法的,但可以通过其他方式实现全选。

3. 举个例子说明使用方法

3-1 选择选项。我们现在通过百度的搜索设置来说明这3种方法的使用。
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.support.select import Select#导入下拉框操作类
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
ActionChains(driver).move_to_element(driver.find_element_by_link_text("设置")).perform()
driver.find_element_by_link_text("搜索设置").click()
select_ele = driver.find_element_by_id("nr") #定位下拉框选项
select_obj = Select(select_ele)#根据定位好的元素实例化一个对象
select_obj.select_by_index(1)#通过索引选择
sleep(2)
select_obj.select_by_value("50")#通过value值选择
sleep(2)
select_obj.select_by_visible_text("每页显示10条")#通过文本选择
sleep(2)
driver.quit()

3-2 返回option信息。通过百度的高级搜索说明这3种方法的使用。
在这里插入图片描述

rom selenium import webdriver
from selenium.webdriver.support.select import Select#导入下拉框操作类
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.implicitly_wait(10)
ActionChains(driver).move_to_element(driver.find_element_by_link_text("设置")).perform()
driver.find_element_by_link_text("高级搜索").click()
sleep(2)
select_ele = driver.find_element_by_name('gpc')
select_obj = Select(select_ele) # 实例化类对象

allinfo = select_obj.options  # 返回下拉框所有的选项,返回列表。
print(allinfo,type(allinfo),len(allinfo))

selectinfo = select_obj.all_selected_options #返回下拉框中已经选择了的选项,返回列表。
print(selectinfo,type(selectinfo),len(selectinfo))

firstinfo = select_obj.first_selected_option # 返回select元素中选中的第一个选项,返回元素。
print(firstinfo,type(firstinfo))

运行效果(太长了,没截完,但是不影响观看):
在这里插入图片描述

3-3 取消选项的方法。因为没有找到多选multiple这下拉框的网站,就借用网上的一个测试网站来演示:http://sahitest.com/demo/selectTest.htm (这里感谢写网站这位大佬!!!)
参考:https://blog.csdn.net/huilan_same/article/details/52246012
附上网页的截图:
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time

driver = webdriver.Firefox()
driver.get('http://sahitest.com/demo/selectTest.htm')
select_obj = Select(driver.find_element_by_id('s4Id'))
select_obj.select_by_index(0)
time.sleep(1)
select_obj.select_by_index(1)
time.sleep(1)
select_obj.select_by_index(2)
time.sleep(1)
select_obj.select_by_index(3)
# 一下4行代码请一行一行的运行
select_obj.deselect_all() #取消全部
select_obj.deselect_by_index(1) #根据下标来取消
select_obj.deselect_by_value('o3val') #根据value来取消
select_obj.deselect_by_visible_text('o3')#根据文本值来取消
driver.close()

最后:

通过Select提供的方法和属性,只可以对标准select下拉框进行操作,但是对于非select标签的伪下拉框,就需要用其他的方法了。如input标签的下拉框,只需要普通的定位、点击就可以了。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值