无法将值分配给隐藏属性输入标签的值

时间:2019-12-20 08:53:53

标签: ruby-on-rails rspec capybara

我想做的事

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

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

我尝试过的

  • 将visible属性设置为false。
    find('#review_rating', visible:false).set('5')
  • 尝试使用名称属性代替id作为第一个参数
    find('input[name="review[rating]"]', visible:false).set('5')

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

1 个答案:

答案 0 :(得分:0)

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

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

另一方面,使用xpath选择器/ Capybara的first方法可解决此问题:

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

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

否则,您可以使用普通的旧JS解决此问题。有关使用JS选择隐藏元素的想法,请参见here,不过最好还是使用唯一的选择器进行重组:

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

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