Rspec + Capybara:使用 xpath 验证 select 选项

Rspec + Capybara: Validating select options using xpath

我有一个 HTML 文档(有一个 ID 为 "countries" 的 DIV 包装了下面的代码),我需要 -

  1. 验证 select 中的选项。我试过了,但这无效。

    expect(page).to have_xpath(('//*[@id="countries"]//select')[1], :options => ['US CAN GER POL'])

  2. 验证第二个 select 被禁用

  3. 验证 CAN 在第一个 select

  4. 中被禁用
  5. 验证 POL 在第一个 selectselect

  6. 中被编辑
  7. 在第一个 select

    中将 selected 选项更改为 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>
      

感谢您提供的任何帮助。谢谢!

警告,我个人仍然使用 rspec 的 should 语法,并且我还使用 css 选择器与 xpath。我只是觉得它们更容易阅读。

(1) 因为您有两个下拉菜单没有任何特定的 ID 或 class 名称来区分彼此,我会使用 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