jjstrip

导航

对于隐藏性质的非标准的动态 id 的下拉框,如何定位和选中

今天,在页面上碰到一个非 select 标签的下拉框,打算进行定位和模拟选中。

 <input aria-invalid="false" autocomplete="disabled" placeholder="请选择" type="text" class="AABBCC-input DDCC-inputDDCCcomplete-input AABBcomplete-inputFocused AACC-inputAdornedEnd" aria-autocomplete="list" autocapitalize="none" spellcheck="false" value id="abc-autocomplete-84931">

没有 <select> 标签,也没看到<ul><li>等标签,无法采用一般方式。

第一个想法是,通过 xpath 定位到 input 后,直接给 value 赋值。结果很显然,行不通,因为对应选项没有真正被选中。

上网找了针对隐藏下拉框用  js 来定位的方法,结果也是不尽人意,因为没有对症下药。

通过 selenium 录制一段脚本做参照。但录制脚本是基于firefox的,页面元素对应的标签属性与chrome不一样,而我测试对象用的浏览器以chrome为主。

但这一圈下来,已经摸清了里头的来龙去脉,完全清楚了这个下拉框写法和其它一般写法的不同之处。于是根据这个非标准情况,自己写。

先 find_element_by_xpath 方法定位下拉框按钮,并模拟单击,然后再定位其中某选项去选中。由于很多属性里面都包含变化的id,只能用contain方法来定位。两行代码如下所示:

driver.find_element_by_xpath("//button[@aria-label='Open popup']").click()  #模拟点开下拉框
driver.find_element_by_xpath("//li[contains(@id,'option-0')]").click()               #模拟选中第一个选项

至此,问题解决。

posted on 2019-11-26 17:34  jjstrip  阅读(634)  评论(0编辑  收藏  举报