使用Capybara ElementNotFound选择下拉列表

时间:2016-03-16 20:36:51

标签: css ruby automation capybara materialize

我试图从Capybara的下拉菜单中选择一个项目。我使用不同的CSS框架做得很好;现在我正在使用Materialise。

我和开发人员谈过,他提到Materialise使用两个选择框,因此可能会在那里感到困惑。不确定这是否有帮助,但我想我会提到它。

我正在处理类似于

的CSS
  <div class="select-wrapper country required">
    <span class="caret">▼</span>    
    <input type="text" class="select-dropdown" readonly="true" data-activates="select-options-0e5c0ffe-1e78-5df0-c08d-7bced194abd1" value="">    

    <ul id="select-options-0e5c0ffe-1e78-5df0-c08d-7bced194abd1" class="dropdown-content select-dropdown" style="width: 435px; position: absolute; top: 0px; left: 0px; opacity: 1; display: none;"><li class="">  <span></span></li>
        <li class=""><span>Afghanistan</span></li>
        <li class=""><span>Åland Islands</span></li>
        <li class=""><span>Albania</span></li>
        <li class=""><span>Algeria</span></li>
        <li class=""><span>United States</span></li></ul>       

    <select class="country required initialized"   name="store[address_attributes][country]" id="store_address_attributes_country"><option value=""></option>
        <option value="AF">Afghanistan</option>
        <option value="AX">Åland Islands</option>
        <option value="AL">Albania</option>
        <option value="DZ">Algeria</option>
        <option value="US">United States</option>

我尝试过的是

select "United States", :from => 'store_address_attributes_country'

我也试过

find("store_address_attributes_country").select("United States")

(我也使用XPath,选择器和名称而不是ID尝试了同样的事情)

这些给我错误

 Capybara::ElementNotFound:
   Unable to find select box "store_address_attributes_country`

1 个答案:

答案 0 :(得分:1)

使用物化时,&lt; select&gt;元素隐藏在页面上并替换为&lt; input&gt;元素作为触发器并且&lt; ul&gt;和&lt; li&gt;元素作为下拉列表。因此,您无法使用#select。相反,您必须复制用户必须执行的操作,即单击用于触发下拉列表的输入,然后单击正确的li。在这种情况下,这将是

find("input.select-dropdown").click
find("li", text: "United States").click

显然,如果页面上有多个选择,第一个查找必须限定页面上的内容(或增加选择器的特异性)