2016-12-03 66 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中添加一個圖像(它位於標籤內部,因此點擊該圖標也會切換複選框)以模擬複選框,並使其在多個瀏覽器中看起來相同。 –