测试 capybara 操作带有 optgroup 的 select

dddd1919 · 2013年11月01日 · 最后由 dddd1919 回复于 2013年11月04日 · 3236 次阅读

一个下拉表单可以直接用 capybara 提供的 select label_text, :from => select_id 要操作的表单现在多了一级 optgroup,结构类似

<select name="category" id="obj_category" >
          <optgroup label="music">
              <option value="rock">Rock</option>
              <option value="popular">Popular</option>
          </optgroup>
          <optgroup label="video">
              <option value="short">Short</option>
              <option value="long">Long</option>
          </optgroup>
          ....
</select>

我要选择下拉节点下的选项,用 select "Rock", :from => "obj_category",结果返回了 Unable to find option "Rock",如果把 optgroup 去掉了就没问题了,股沟了一下有用 selenium 解决的,但是只用 capybara,各位高手怎么破?

find("option[value='rock']")

这个会找到你的第一个 option,或者直接找 text 也行:

find "Rock"

担心找重了,就善用 within,比如:

within "#obj_category" do
  find "Rock"
end

#1 楼 @nightire 谢谢,within 解决了一部分问题了!就是中文标签还有问题 💔

#2 楼 @dddd1919 中文是这样的,一般来说我不写纯中文的应用,也就是说我不把中文直接写在 views 里或 helpers 里。因为 Rails 提供的 I18n 相当简单,所以哪怕我的应用只有中文版,我在开发的时候也是做一个英文版,然后用 I18n 的方式变成中文版上线。

好处?测试的时候我完全不关心页面上显示的到底是中文还是英文,而是直接用 I18n.t(key) 的方式去获取页面上的文字,根据 locale 的设定,无论任何语言都是通过的。

#3 楼 @nightire 好方法!借鉴一下

需要 登录 后方可回复, 如果你还没有账号请 注册新账号