验证水豚是否有任何不同的菜单项

Validating is there any different menu item with capybara

我会努力改进问题。 如何验证菜单中是否包含不同的项目:GAR? 我在下面使用它仍然没有用 page.all('select#tbm2').map(&:value).should == %w(Regras, GAR Regras, GAE Log Processamentos GAR/GAE)

<div id="tbm2" class="tb">
      <div id="TBH_tbm2" onclick="javascript:showMenu('tbm2','tbm2', true, true)" class="tbh">GAR</div>
      <div id="TBB_tbm2" class="tbb">
         <div onclick="sendEvent(0,event,this,searchImage(this),0,'','1370','Menu','','','.13.3','',''); " class="tbi tbiSel">
            <div>
               <div class="tbiIcon"><img src="r/std/static/pixel.gif" class="icon icon_config" draggable="false"></div>
            </div>
            <div>Regras GAR</div>
         </div>
         <div onclick="sendEvent(0,event,this,searchImage(this),0,'','1370','Menu','','','.13.4','',''); " class="tbi">
            <div>
               <div class="tbiIcon"><img src="r/std/static/collapse16.gif" class="icon" draggable="false"></div>
            </div>
            <div>Regras GAE</div>
         </div>
         <div onclick="sendEvent(0,event,this,searchImage(this),0,'','1370','Menu','','','.13.6','',''); " class="tbi">
            <div>
               <div class="tbiIcon"><img src="r/std/icons/listini64.png" class="icon" draggable="false"></div>
            </div>
            <div>Log Processamentos GAR/GAE</div>
         </div>
      </div>
   </div>
</td>

all('select#tbm2') 将查找 ID 为 tbm2 的所有 <select> 个元素,其中在您的 HTML 中有 none 个元素。 .value 也得到一个元素的 value 属性 但你有所有 div 元素没有值。如果您想使用您正在尝试的方法,它将类似于

page.all('#tbm2 .tbi', count: 3).map(&:text).should == ['Regras GAR', 'Regras GAE', 'Log Processamentos GAR/GAE']

另一种选择是使用负正则表达式匹配,例如

page.find('#tbm2').should_not have_css('.tbi', text: /^(?!Regras GAR|Regras GAE|Log Processamentos GAR/GAE)/)

另一种选择是使用可以传递给大多数 Capybara 查找器方法的过滤器块,例如

page.should_not(have_css('#tbm2 .tbi') { |node| ['Regras GAR', 'Regras GAE', 'Log Processamentos GAR/GAE'].none?(node.text) })

注意:我正在使用 should 语法,因为这是你在问题中尝试的,但现在你真的应该切换到 RSpecs expect 语法