Robot Framework下拉复选框ElementNotVisibleException问题求助
ElementNotVisibleException异常排查
遇到ElementNotVisibleException异常,但查看日志截图时,页面上的下拉元素明明是可见的。
对应HTML代码
<div id="xdo:parameters" class="xdoParameters"> <table class="fieldText parameters" summary="" cellspacing="0"> <tbody> <tr> <td class="left"> <div id="xdo:_paramsBrncd_div" style="width: 120px; display: inline; white-space: nowrap; font-size: 13px; zoom: 1; margin: 0px; padding: 0px; font-family: Tahoma, Verdana, Helvetica, sans-serif; font-weight: normal; color: rgb(0, 0, 0); cursor: pointer;"> <input type="text" id="xdo:xdo:_paramsBrncd_div_input" name="xdo:xdo:_paramsBrncd_div_input" readonly="readonly" onkeypress="var code = EventUtils.getKeyCode(event); if (code == 40 || code == 13) {document.getElementById(this.id).parentNode.onclick();} return true;" class="mchoicebox" style="width: 103px; padding: 2px 0px 1px;"> <span style="border-style: solid; border-color: rgb(172, 186, 207) rgb(0, 0, 0) rgb(0, 0, 0) rgb(183, 183, 178); border-width: 1px; margin: 1px 1px 1px 0px; background-image: url("/xmlpserver/resource/blafplus/menu/gradient_n.png"); background-position: center top; background-repeat: repeat; font-size: 12px; padding-top: 1px; padding-bottom: 1px;"> <span tabindex="-1" style="margin-left: -2px; margin-right: -2px; background-repeat: no-repeat; background-image: url("/xmlpserver/resource/blafplus/menu/dropdown_n.png"); background-position: center center; font-size: 12px; outline-width: 0px; padding-right: 14px; cursor: pointer;"> <span style="opacity: 0; zoom: 1;"> </span> </span> </span> <select name="_paramsBrncd" id="xdo:_paramsBrncd" multiple="multiple" style="display: none;"> <option value="100">100</option> <option value="200">200</option> <option value="300">300</option> <option value="400">400</option> <option value="500">500</option> <option value="999">999</option> </select> </div> </td> <td class="left">...</td> </tr> </tbody> </table> </div>
我的Robot Framework代码
Wait Until Element is Visible (//div[@id="xdo:parameters"]//select)[1] 5s Select From List By Value (//div[@id="xdo:parameters"]//select)[1] 100 Select From List By Value (//div[@id="xdo:parameters"]//select)[2] 150 Select From List By Value (//div[@id="xdo:parameters"]//select)[2] 151 Wait Until Element is Visible //button[.="Apply"] Click Element //button[.="Apply"]
报错信息
Element '(//div[@id="xdo:parameters"]//select)[1]' not visible after 5 seconds.
原因与解决方法
原因
你定位的<select>标签自带style="display: none;"属性,这说明原生下拉框是隐藏状态。页面上可见的下拉组件是用input和span模拟的自定义控件,Selenium判断元素可见性的标准是元素本身的display属性不为none、visibility不为hidden等,所以即使页面上有可见的下拉框,你定位的原生select实际不可见,导致抛出异常。
解决方法
放弃直接操作隐藏的原生select,模拟用户真实操作流程:
- 先点击页面上可见的下拉触发按钮(带箭头的span元素)
- 等待下拉选项列表弹出
- 点击目标选项
修改后的Robot Framework示例代码:
# 点击自定义下拉触发按钮 Click Element //div[@id="xdo:_paramsBrncd_div"]//span[@tabindex="-1"] # 等待目标选项可见 Wait Until Element is Visible //select[@id="xdo:_paramsBrncd"]/option[@value="100"] 5s # 点击选择选项 Click Element //select[@id="xdo:_paramsBrncd"]/option[@value="100"] # 其他下拉选项操作同理,先触发下拉再点击选项 Wait Until Element is Visible //button[.="Apply"] Click Element //button[.="Apply"]
如果是多选组件,可重复执行“触发下拉+点击选项”的步骤,部分组件也支持按住Ctrl键批量选择,可结合Press Key关键字实现。
内容的提问来源于stack exchange,提问作者Deekshith
相关产品推荐
相关产品推荐

