今天,在页面上碰到一个非 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()               #模拟选中第一个选项

至此,问题解决。

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

  1. java动态生成带下拉框的Excel导入模板

    在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...

  2. 动态改变ComboBox下拉框的宽度

    在C++Builder中有时下拉框的内容比较长,标准长度下根本显示不完,可以调用PostMessage()方法来实现 ::PostMessage(comb->Handle,CB_SETDROPP ...

  3. 动态加载下拉框列表并添加onclick事件

    1.  js动态加载元素并设置属性 摘自(http://www.liangshunet.com/ca/201408/336848696.htm) <div id="parent&quo ...

  4. layui 根据根据后台数据动态创建下拉框并同时默认选中

        第一步 form表单里写好一个下拉框 <div class="layui-form-item"> <label class="layui-for ...

  5. 【jquery】ajax 动态 改变 select下拉框选中的值

    //JS<script type="text/javascript> //ajax动态给添加原料的[商品名称]下拉框绑定selected属性 $("#origin_co ...

  6. jquery动态实现填充下拉框

    当点下拉框时动态加载后台数据. 后台代码 protected void doPost(HttpServletRequest request, HttpServletResponse response) ...

  7. jQuery动态生成<select>下拉框

    前一阵在项目里需要动态生成下拉框,找了一下用jQuery实现比较方便,这里整理一下. 下文所述方法只是本人在项目中遇到问题的解决方法,场景较为简单,也希望能帮助有需要的朋友 1.动态生成下拉框的两种方 ...

  8. angularjs小练习(分别通过ng-repeat和ng-option动态生成select下拉框)

    本次做一个简单的关于动态生成select的练习 在实现上有两种方式: 其一.通过ng-repeat来实现 其二.通过ng-option来实现 在页面效果上,两种实现的效果都一样 但是在数据选择的数据从 ...

  9. jQuery 动态加载下拉框选项(Django)

    function change_style() { $.ajax({ url: "{% url 'change_style' %}", type: "GET", ...

随机推荐

  1. MySQL第四课

    CREATE TABLE biao(    name VARCHAR(20) PRIMARY KEY,    age INT(11) NOT NULL,    sex CHAR(11)DEFAULT ...

  2. C/C++ 变量的本质分析

    1. 程序通过变量来申请和命名内存空间. int a=0; //申请一个大小为int型的内存空间,这个内存空间取名叫a,申请的内存空间里存储0 2. 可以通过变量名访问变量的内存空间. 3. 修改变量 ...

  3. Educational Codeforces Round 71 (Rated for Div. 2)

    传送门 A.There Are Two Types Of Burgers 签到. B.Square Filling 签到 C.Gas Pipeline 每个位置只有"高.低"两种状 ...

  4. 怎么解决 hash 冲突

    开放定址法: 线性探测再散列 二次探测再散列 伪随机 再hash: 同时构造,多个不同的hash函数 链地址: 链表, 建立公共溢出区: 分为基本表和溢出表两个部分 开放散列(open hashing ...

  5. css 两行、多行超出后用省略号...表示

    .item-name { letter-spacing: ; overflow: hidden; display: -webkit-box; text-overflow: ellipsis; -web ...

  6. 剑指Offer-36.数字在排序数组中出现的次数(C++/Java)

    题目: 统计一个数字在排序数组中出现的次数. 分析: 给定一个已经排好序的数组,统计一个数字在数组中出现的次数. 那么最先想到的可以遍历数组统计出现的次数,不过题目给了排序数组,那么一定是利用了排序这 ...

  7. POI2008 CLO-Toll

    [POI2008]CLO-Toll 题意描述 Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road ...

  8. Pytorch创建模型的多种方法

    目录 Method 1 Method 2 Method 3 Method 4 Reference 网络结构: conv --> relu --> pool --> FC -- > ...

  9. 图解隐马尔可夫模型(HMM)

    写在前面 最近在写论文过程中,研究了一些关于概率统计的算法,也从网上收集了不少资料,在此整理一下与各位朋友分享. 隐马尔可夫模型,简称HMM(Hidden Markov Model), 是一种基于概率 ...

  10. DatabaseLibrary -数据库操作

    操作数据库: Table Must Exist 验证表必须存在,存在则Pass,反之Fail Delete All Rows From Table 删除数据库中表的所有行 Execute Sql St ...