尝试做
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
如何选择是否不可见?有没有办法强制可见度?
答案 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
可能更优雅。