Python + Selenium 定位非selected型下拉框的方法
阅读原文时间:2023年07月08日阅读:4

最近在尝试给自己负责的模块写UI自动化的Demo

登录及切换页面比较顺利

但是遇到下拉框的选择时,遇到了一点困难

我负责的模块页面的下拉框并非Select类型,无法使用select_by_index or select_by_value等方法

其下拉框的html长这样:

是ul下包裹100+li的形式

先说一下错误路径:

(1)先定位到产品名称字段,然后通过send_key()把想要录入的值输入

结果:前端设定录入后必须点击才能选上,导致最后提交时,报该字段为空

(2)尝试两次点击

先定位到产品名称字段

然后定位下拉选项

两次定位均使用XPath方式,且使用的是Chrome插件 ChroPath

结果:程序报错,报element can not interable 或者 Unable to locate element等错误

尝试加入睡眠时间,未果

(3)两次查找,一次点击

代码如下:

Product_list = browser.find_element_by_xpath("//div[@class='el-input el-input--suffix']//input[@placeholder='请选择产品名称']")
Product_list.find_element_by_xpath('//span[text()="040004    兴业银行2013专户4号"]').click()

结果:仍然报错

(4)尝试自己写Xpath

搜了无数的文章,自己尝试写了无数次

终于解决了,也算是对我即将崩溃的心灵的一次慰藉

说一下成功的这一次的Xpath的编写路径:

打开Xpath Helper,按住Shift,查看我要选择的下拉框所在的块

找到对应div,往下查找特殊的能唯一标识元素位置的节点

最终的Xpath长这样:

//div[@class="el-select-dropdown el-popper"]//ul[@class="el-scrollbar__view el-select-dropdown__list"]/li/span[contains(text(),"040004")]

下图为关键节点的位置示意图:

Bingo,终于完美解决,附上对应代码:

browser.find_element_by_xpath("//div[@class='el-input el-input--suffix']//input[@placeholder='请选择产品名称']").click()
time.sleep(3)
browser.find_element_by_xpath('//div[@class="el-select-dropdown el-popper"]//ul[@class="el-scrollbar__view el-select-dropdown__list"]/li/span[contains(text(),"040004")]').click()

长叹一口气:

只要大方向正确,那就得多尝试、不气馁

加油加油加油!