无法选择下拉列表

use*_*050 3 watir-webdriver selenium-webdriver

我正在运行:Windows 7 watir-webdriver 0.6.4 selenium-webdriver(2.35.1,2.35.0,2.31.0)

<div>
    //more embedded codes...
    <div id="emd1" class="ui-select" style="float: left; width: 90%;">
        <a id="emb1" class="ui-btn ui-btn-icon-right ui-btn-corner-all ui-shadow ui-btn-up-d" href="#" role="button" aria-haspopup="true" aria-owns="emb1" data-theme="d">
            <span class="ui-btn-inner ui-btn-corner-all" aria-hidden="true">
                <span class="ui-btn-text">Choose one... </span>
                <span class="ui-icon ui-icon-arrow-d ui-icon-shadow"></span>
            </span>
        </a>
        <select id="emu1" data-placeholder="true" data-native-menu="false" serial="1" sequenceid="1" tabindex="-1">
            <option value="">Choose one...</option>
            <option value="A">Apple </option>
            <option value="B">Banana </option>
            <option value="C">Cat </option>
            <option value="D">Dog </option>
            <option value="E">Elephant </option>
            <option value="F">Fish </option>
        </select>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

无论什么时候我想选择ddl,我都会一直这样做,它总能正常工作

browser.select_list(:id = "emu1").select("Apple")
Run Code Online (Sandbox Code Playgroud)

它将完成工作.突然它停止工作了.我不确定它是否是由于我最近在selenium-webdriver和watir-webdriver上进行的升级.或者由于代码更改.

browser.a(:id => "emb1").wait_until_present
Run Code Online (Sandbox Code Playgroud)

工作良好

browser.select_list(:id => "emu1").wait_until_present
Run Code Online (Sandbox Code Playgroud)

等待30秒并给我找不到元素错误.

还有其他人有类似问题吗?任何帮助都很好.提前致谢.

Son*_*eaf 5

没有看到显示HTML的CSS我不能100%肯定,但我有预感,面向用户的选择列表实际上是一个样式<span>.将<select>很可能被隐藏CSS.如果<select>CSS被CSS隐藏,webdriver就无法"看到"它.

为了公开这样的选择列表,我使用JavaScript来改变它selectdisplay属性.在访问fancy之前,我已将此代码段添加到我的watir-webdriver工具箱中select_lists:

script = %q{document.getElementById("emu1").style.display = "block");}
browser.execute_script(script)
Run Code Online (Sandbox Code Playgroud)

这会改变选择列表的显示属性,因此现在可以通过select_listwebdriver可用的所有命令进行访问.

您可以通过使用选择列表前往页面并打开首选Web浏览器的开发人员控制台来尝试此操作.尝试以下操作,看看您是否现在看到一个选择列表:

document.getElementById("emu1").style.display = "block";
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试使用display = "inline".如果现在显示标准HTML选择列表,您就找到了罪魁祸首和解决方案.