选择<option> </option>标记内的内容

时间:2014-10-15 15:40:45

标签: css css-selectors cucumber capybara qa

使用黄瓜和SitePrism编写测试,我在页面上有以下HTML ...

<select name="product_status_id" id="product-status" class="pull-right">
   <option value="">Select a Status</option>
   <option value="1">Active Product</option>
   <option value="2">Inactive Product</option>
</select>

目前,我为此下拉列表设置的元素选择器是......

 element :status_active, '#product-status'

我首先将测试中的第一个值设置为&#34; Active Product&#34; ...

And(/^I select the status of Active$/) do
   @page.product.status_active.select("Active Product")
end

然后验证保存的值是&#34; Active Product&#34;

的状态
And(/^the product values entered should match those which were saved$/) do
   @page.product.status_active.value.should == "1"
end 

但是,如果要切换这些值,"Active Product"value="2""Inactive Product"value="1",则测试将不再验证该字段是设置为"Active Product"值。

是否有可以编写的实例检查选项标签之间的内容?

<option>want to select content here</option> 

当我写下以下内容时......

@page.product.status_active.text.should == “Active Product”

返回以下内容......

"Select a Status Active Product Inactive Product”

所以.text方法在这里似乎不是一个合适的解决方案。

可以写什么来选择选项标签之间的内容?

2 个答案:

答案 0 :(得分:1)

选择一个选项后,它应该具有如下所选的属性:<option value="1" selected>Active Product</option>,您可以将其用作选择器。

因此,您可以找到所选的选项:@page.product.status_active.find('option[selected]')

因此,要验证所选选项的文本,您可以执行以下操作:@page.product.status_active.find('option[selected]').text.should == “Active Product”


在相关的说明中,我实际上发现自己经常这样做,我将以下内容添加到我的测试套件中: class Capybara::Node::Element def selected_option self.find('option[selected]') end end

这会为pickybara元素添加selected_option。有了这个,你可以这样做@page.product.status_active.selected_option.text.should == “Active Product”

答案 1 :(得分:0)

如果我理解正确,您希望能够仅使用选项标签之间的文本从下拉列表中选择内容。

找到选择器的css后,您可以使用文本匹配器找到所需的选项。它还使一些规范易于阅读和维护。

这里使用的是水豚:

page.find('#product-status option',:text =&gt;'Active Product')。点击