2016-12-03 63 views
0

我正在使用水豚手动填写页面,但是我遇到了问题。水豚不能检测元素,即使它在页面上可见

当试图执行这条线(我想也设置可见为false):

find(:css, "[value='Laundry In Building']", visible: true).set(true) 

它得到以下错误:

Unable to find css "[value='Laundry In Building']" 

这是令人困惑,因为我看到在现场浏览器在测试运行时。此外,当我输出page.body,我得到如下:

<div class="listing-edit-cb-item"> 
    <input class="cb" id="building_features_3" name="features[]"value="Laundry In Building" type="checkbox" /> 
    <label for="building_features_3"> 
    <span class="cb"></span> 
    <span style="width: 200px; display: inline-block; font-size: 0.90em;">Laundry In Building</span> 
    </label> 
</div> 

为什么水豚没有表检测复选框元素?

回答

1

您不会显示应用于该复选框的CSS,但我敢打赌,它实际上并不是您在页面上看到的复选框。使用您的浏览器开发控制台来查看页面上实际显示的内容,它可能使用span.cb上的伪元素将复选框替换为图像,以使它们在多个浏览器中看起来相同。如果您使用的是最近的水豚的版本,你可以做

check('Laundry In Building', allow_label_click: true) # found by labels text 

check(option: 'Laundry In Building', allow_label_click: true) # found by checkbox inputs value property 

将通过点击可视标签,而不是实际的输入是隐藏在选中此复选框。如果使用旧版本,则需要找到标签,然后点击它。类似于

find(:css, 'label', text: 'Laundry In Building').click 
+0

感谢您的解释。我目前按照你的建议点击标签,但不明白为什么我的初始解决方案无法正常工作。真棒。 – Huy

+1

@Huy您的初始解决方案无法正常工作,因为复选框的输入元素实际上并不在页面上可见,所以您无法直接与它交互(即使您可以使用'visible:false'查找元素等 - 水豚仍然不会让你与元素互动,因为用户不能)。可能会在span.cb中添加一个图像(它位于标签内部,因此点击该图标也会切换复选框)以模拟复选框,并使其在多个浏览器中看起来相同。 –