首页 > 解决方案 > 不能为隐藏属性输入标签的值赋值

问题描述

我想做的事

  我想为隐藏属性的 iput 标记的值分配一个值,如下面的 SystemSpec 所示。

     <input id = "review_rating" type = "hidden" name = "review[rating]">

我试过的

    find('#review_rating', visible:false).set('5')
    find('input[name="review[rating]"]', visible:false).set('5')

如果你写第一个选项,FeatureSepc 将通过测试。

标签: ruby-on-railsrspeccapybara

解决方案


问题是您应该能够通过常规行为更新隐藏字段,因此不允许这样做。有关更多信息,请参阅此处的讨论。

问题是您为什么要对此进行测试 - 隐藏字段是否由页面上的另一个元素操作?如果是这样,找到并互动(点击?)。

另一方面,使用 xpath 选择器/Capybara 的first方法是为了解决这个问题:

find(:xpath, "//input[name="review[rating]"]").set("5")
first('input[name="review[rating]"]', visible: false).set("5")

...但这可能意味着调整您的代码以确保选择器是唯一的,正如 Mike Heft 的评论中所建议的那样。

否则,您可以使用普通的旧 JS 来解决问题。有关使用 JS 选择隐藏元素的想法,请参见此处,不过,也许最好使用独特的选择器进行重组:

page.execute_script("document.querySelector('input[name="review[rating]"]').value = '5'");

希望这里有帮助 - 让我知道你的进展:)


推荐阅读