今天,在页面上碰到一个非 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. Mac OS 自带apache 启动不了的问题

    问题:Mac OS 自带apache,启动不了,拒绝访问. 1.先看一下错误日志 /etc/apache2/httpd.conf 2.然后我去找了一下/private/var/log/apache2/ ...

  2. dd 工具使用; SSD 顺序写性能测试;

    dd 工具使用: dd 也是我们经常使用到的磁盘测试工具,Linux服务器装好系统之后,想要知道硬盘的读写是否能满足服务的需要,如果不满足硬盘的IO就是服务的一个瓶颈.我们可以使用dd命令简单进行测试 ...

  3. Centos7配置桥接网络

  4. 解决SQL Server中无管理员账户权限问题

    遇到忘记SQL Server管理员账户密码或管理员账户被意外删除的情况,如何在SQL Server中添加一个新的管理员账户?按一下步骤操作可添加一个windows账户到SQL Server中,并分配数 ...

  5. 请不要嘲笑你身边那些投了P2P的朋友

    在这方面我是非常谨慎的,但依然逃脱不了翻车的命运 这段时间曾经无数大V强烈推荐的懒投资出现大面积逾期,又把这个行业推上了风口浪尖,这里讲一讲我的故事 对于大多数人的理财投资可能是从2013年余额宝的推 ...

  6. 终结 finalize() 和对象引用

    一.finalize() 方法 1. 为什么要有 finalize() 方法? 假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由 new 分配的内存,所以他 ...

  7. php 压缩字符串

    压缩字符串: base64_encode(gzcompress(serialize($data))) 解压字符串: unserialize(gzuncompress(base64_decode($se ...

  8. 对js的有感而发

    1.什么是JavaScript?他是一个脚本语言,也是一种解释性语言,也是一种弱类型语言.2,当我们学习JavaScript时我们肯定要知道,js的组成是什么? 应该怎么用?这些是最基础的.js的组成 ...

  9. 【swoole】结合swoole 和 nsq 的实际应用

    集合 swoole 的框架设计 为了减少理解度,我尽量的从源头开始引入 1. nsq 案例中是使用 swoole 结合一个php 框架实现的是 NSQ 订阅功能. 启动命令: sudo bash /w ...

  10. 详解JAVA8Stream 方法引用(基础){全}

    1: Stream流 1.1 引言 1.2 流式思想概述 1.3 获取流 1.4 常用方法 1.5 练习:集合元素处理 2:方法引用 2.1 冗余的Lambda场景 2.2 方法引用符 2.3 通过对 ...