2016-03-23 68 views
1

我有一個HTML文件(有一個與以下包裝此代碼「國家」的ID的DIV),並在我需要選擇選項 -Rspec的+水豚:驗證使用XPath

  1. 驗證選擇中的選項。我試過這個,但這是無效的。

    預期(頁)。爲了have_xpath(( '// * [@ ID = 「國家」] //選擇')[1], :選項=> [ 'US CAN GER POL'])

  2. 驗證該第二選擇被禁止

  3. 驗證,可以在第一禁用選擇

  4. 驗證POL在所選擇的第一選擇

  5. 變化在第一選擇的選項,GER選擇

      <li> 
          <fieldset> 
          <select> 
           <option value="US">USA</option> 
           <option value="CAN" disabled>Canada</option> 
           <option value="GER">Germany</option> 
           <option value="POL" selected>Poland</option> 
          </select> 
          <fieldset> 
      <li> 
      <li> 
          <fieldset> 
          <select disabled> 
           <option value="US">USA</option> 
           <option value="CAN">Canada</option> 
           <option value="GER">Germany</option> 
           <option value="POL">Poland</option> 
          </select> 
          <fieldset> 
      <li> 
      

我明白任何幫助,您可以提供。謝謝!

回答

1

警告的話,我個人仍然使用rspec的should語法,我也使用css選擇器與xpath。我只是覺得它們更易於閱讀。

(1)因爲你有兩個下拉菜單,沒有任何特定的ID或類名標識從另外一個,我會用all來限制你的期望範圍內

all('#countries select')[0].should have_text('USA Canada Germany Poland')

(2)相同的概念如上所述,限制範圍。第二個字段應包含禁用的下拉菜單。

all('#countries fieldset')[1].should have_css('select[disabled]')

(3)all('#countries select')[0].should have_css('option[disabled]', :text => 'Canada')

(4)相同的答案#3,但具有不同的屬性和文本

(5)all('#countries select')[0].find('option', :text => 'Germany').click

+1

您是天賜菲爾!謝謝,我用這些東西打破了我的頭幾個小時。 –

+0

對於你給出的例子,這是一個很好的答案,但是如果你在選擇(id,name,label)等方面有任何類型的標識符 - 那麼capybara提供了has_select匹配器和find(:select,...)finder哪個支持大多數語義選項都是您想要的。 –

+1

@TWWalpole - 在我的表單中,我動態添加具有隨機生成名稱和ID的行,因此我無法在測試中使用它們。因此,這種方法對我來說效果更好。 –