ElementNotVisibleError - 特定的Watir-Webdriver问题

时间:2016-08-11 18:21:27

标签: ruby selenium watir watir-webdriver

尝试做

b.select_list(:name => "bedroomsMin").select '3+ Beds'

<div class="beds col-sm-2 hidden-xs">
    <div class="form-group">
        <select class="form-control wide" name="bedroomsMin">
            <option value="null">All Beds</option>
            <option value="0">0+ Beds</option>
            <option value="1">1+ Beds</option>
            <option value="2">2+ Beds</option>
            <option value="3">3+ Beds</option>
            <option value="4">4+ Beds</option>
            <option value="5">5+ Beds</option>
        </select>
    </div>
</div>

但收到以下错误:

element not visible: Element is not currently visible and may not be manipulated (Selenium::WebDriver::Error::ElementNotVisibleError).

此列表选择器包含在单击的下拉元素中:

b.link(:class => 'btn-open-filers').when_present.click

如何选择是否不可见?有没有办法强制可见度?

3 个答案:

答案 0 :(得分:3)

听起来像是时间问题。单击链接时,包含选择列表的对话框可能在Watir尝试与之交互之前不会出现。

尝试等待选择列表:

request.AddJsonBody("{"+"Boolean column"+":false\"}");
request.AddJsonBody("{"+"Boolean column"+":0\"}");

答案 1 :(得分:0)

看起来隐藏的<div class="beds col-sm-2 hidden-xs">可能与它有关。

此外,您似乎只检查元素何时存在,也就是说如果它在html中加载但不是可见它仍将返回true。

以下是对此的快速阅读:

What's the difference between `visible?` and `present?`?

由于您在检查其存在后单击下拉列表,因此可能存在计时问题。在这种情况下,它可能会检查DOM中是否存在下拉列表,但实际上并未打开下拉列表。

可能想尝试类似的事情:

dropdown = b.link(:class => 'btn-open-filers')
dropdown.click if dropdown.visible?
b.select_list(:name => "bedroomsMin").select '3+ Beds'

答案 2 :(得分:0)

Watir旨在与用户可以与之交互的元素进行交互。因此,如果用户无法看到,则您无法与其进行互动。所以,它的功能,而不是一个bug。 :)

话虽如此,但是从帖子中可以清楚地看出导致错误的操作是什么。在您尝试选择其中的选项之前,此代码将等待选择列表变为可见:

b.link(class: 'btn-open-filers').when_present.click
b.div(class: 'form-group').wait_until_present
b.select_list(name: 'bedroomsMin").select '3+ Beds'

贾斯汀的答案在功能上与此相同,when_present可能更优雅。