selenium 定位input输入框下的选择项
今天的问题与下图中的类似
这是一个input型输入框,当我点击或输入值时,输入框下方会显示选择项帮助快速输入,代码如下:
<input class="v-input some" autocomplete="off" name="some"/> <input name="any" style="display: none;"/> <ul class="V-ss bb "> <li class="v-select-item">苹果</li> <li class="v-select-item">樱桃</li> <li class="v-select-item">蓝莓</li> </ul>
一开始我只定位了inout输入框,向其中输入数据“苹果”,然后点击查找,这时问题出现了,虽然页面刷新了,但是并未进行查找
问题存在的原因是,输入框虽然提供了输入,但是必须从出现的选择项中进行点击,完成选择,才可进行查找,由此我就需要定位到代码中相应的li
解决方法1:
首先向输入框中输入值,然后下方选项就会只显示<li>苹果</li>,然后在查找input输入框的兄弟元素下的li(此时是唯一的)
drive.find_element_by_name("some").input("苹果“) drive.find_element_by_xpath("//input[@name=\'some\']/following-sibling::ul/li").click()
解决方法2:
点击输入框,将会显示下方选项,然后查找input输入框下兄弟元素下的li(此时是一个列表),然后传入值,遍历lil列表,找到和传入值相同的li的text值,进行点击
drive.find_element_by_name("some").click()
lilist=drive.find_elements_by_xpath("//input[@name=\'some\']/following-sibling::ul/li")
for li in lilist:
if li.text=="苹果"
li.click()
我认为方法2比方法1更严谨一些,上述代码还少了一些判断,在实际应用中不可忽视