**
python-下拉框常见定位方法总结
**
UI自动化时经常会遇到页面上有下拉框需要定位的问题,今天就在这里给大家分享一下定位select下拉框的经验。
一般情况下,我们在页面上通过Chrome开发工具查看到的有三类下拉框:
1、常见的 select option格式 下拉框
一般步骤为:先定位select这个大元素,再具体定位各个option选项,当要选中下拉框中的某一选项时,可选择通过for循环查找定位再点击,也可以通过xpath直接定位到需要的选项再点击,也就是下面的代码:
select = driver.find_element_by_name("testname") # 这里可选select框的常见属性id、name、class等
options = select.find_elements_by_tag_name("testname")
for option in options:
print "Value is: " + option.get_attribute("value")
print "Text is:" +option.text
if 'testname' in option.text: # 这里使用的是option的text属性
option.click()
break
使用xpath来代替for循环,直接具体选项定位:
driver.find_element_by_name("testname")
time.sleep(1) # 注意下拉框的加载时间,最好有等待时间
driver.find_element_by_xpath("//select//option[title="testname"]").click()
当然如果select选框内元素并不多时,可直接利用option元素的具体属性进行定位:
# 通过index下标顺序1/2/3类推选择
Select(driver.find_element_by_id("testname")).select_by_index(1)
# 通过value值选择
Select(driver.find_element_by_id("testname")).select_by_value("2")
# 通过text文字选择
Select(driver.find_element_by_id("testname")).select_by_visible_text("test001")
2、bootstrap特效的dropdow 下拉框
# 第一步同样要定位到select框
driver.find_element_by_id('project-test').click()
time.sleep(1)
# 第二步通过xpath定位到要点击的list集合
options = driver.find_elements_by_xpath("//ul[@class='list-test']/li")
# 第三步通过for循环找到要点击的具体选项
for li in options:
if "autotest" in li.text: # 这里用text属性寻找,也可选id或class
i.click()
break
time.sleep(2)
这里的关键是,选择最终要点击的选项,必须是用唯一的属性来定位,上述代码用text,就是以目标select框中text为唯一属性;如果在实际操作时,用id、text等属性发现定位不到时,就要注意选择的属性是否唯一,如果不唯一,则要寻找其他属性(class等)来确定。
3、选项在select框的分页中,需要点击下页操作:
定位select框和option集合用上面两个下拉框的方式均可实现,关键在于分页定位的操作,要判断所选的option是否在当前页面,如果不在要点下页再搜索,也就是分两步:
第一步:定位select框和option集合
第二步:一页一页去定位option选项,当元素找出时点击并退出循环
# 定位到select框
driver.find_element_by_id('project-test').click()
time.sleep(1)
# 通过xpath定位到要点击的list集合
testname = driver.find_elements_by_xpath('//*[@id="project-suggestions"]/div')
# for循环定位具体选项
count = 0
while count < 1:
for name in testname:
if "test010" in name.text:
name.click()
count = count + 1
break
else:
driver.find_element_by_xpath("//button[x-page-next')]").click()
time.sleep(1)
参考链接:https://www.cnblogs.com/thb-blog/p/7606922.html
来源:CSDN
作者:weixin_44324700
链接:https://blog.csdn.net/weixin_44324700/article/details/103242521