2016-03-28 10 views
1

私がテストしているウェブサイトには、選択したフィルタがたくさんあります(picture for context)。RubyでCapybara/Cucumber:要素がなくなると検索を停止します

When /^each (.+) is clicked$/ do |element| 
    page.all("#{element}").each do |element| 
    element.click 
    end 
end 

このコードでは、閉じるボタンをクリックして開いているすべてのフィルタを閉じます。私がいる問題は、私は、フィルタの最後に到達したとき、それは見て保持していることであり、このエラーが発生します。

stale element reference: element is not attached to the page document 
     (Session info: chrome=49.0.2623.87) 
     (Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Mac OS X 10.10.5 x86_64) (Selenium::WebDriver::Error::StaleElementReferenceError) 
     ./features/step_definitions/ux_steps.rb:22:in `block (2 levels) in <top (required)>' 
     ./features/step_definitions/ux_steps.rb:21:in `/^each (.+) is clicked$/' 
     features/ux.feature:16:in `When each span is clicked' 

HTML:

<div class="sort-block order" id="selectedFilters"> 
    <a id="Anti-Inflammatory_selectedfilter" href="javascript:void(0)" class="current">Anti-Inflammatory<span class="selectedFilterCross" onclick="selectedFilterFun('selectedFilterText1','Anti-Inflammatory',-1); $(this).parent('a').remove();">X</span></a> 
    <a id="Cardiac_selectedfilter" href="javascript:void(0)" class="current">Cardiac<span class="selectedFilterCross" onclick="selectedFilterFun('selectedFilterText1','Cardiac',-1); $(this).parent('a').remove();">X</span></a> 
    <a id="Diabetic_selectedfilter" href="javascript:void(0)" class="current">Diabetic<span class="selectedFilterCross" onclick="selectedFilterFun('selectedFilterText1','Diabetic',-1); $(this).parent('a').remove();">X</span></a> 
</div> 

検索を停止する方法上の任意のアイデアアイテムのリストが空になったら?すべての助けに感謝します!

答えて

1

ループを開始したときにページ上の要素がクリックされてページから削除されたと考えられます。もしそうなら、あなたは、それ以上を見つけることができませんまで、繰り返し、クリック可能な要素を探してあなたが見つける最初のものをクリックして、再度検索して、それを修正することができるはず:"#{string}"が同じであることを

When /^each (.+) is clicked$/ do |selector| 
    while true 
    element = page.first(selector) 
    if element 
     element.click 
    else 
     break 
    end 
    end 
end 

注意。

+0

これでエラーは削除されましたが、現在は無限ループに詰め込まれています。 – user5854440

+0

申し訳ありません、タイプミス。一定。 –

+0

これはまだ無限ループに詰まっています。それはすべてのフィルタを閉じますが、その後もより多くのフィルタを探し続けます。わかりやすく私の質問にhtmlを追加しました。 – user5854440

関連する問題