python-selenium-下拉框定位

瘦欲@ 提交于 2020-01-27 07:56:58

**

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!