【问题标题】:A value cannot be assigned to the value of the hidden attribute input tag不能为隐藏属性输入标签的值赋值
【发布时间】:2019-12-20 08:53:53
【问题描述】:

我想做的事

  我想给隐藏属性的 iput 标签的值赋值,如下图 SystemSpec 所示。

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

我尝试了什么

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

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

【问题讨论】:

  • 在同一页面上有两个相同值的 id,在这种情况下 review_rating 会导致问题。每页 ID 应该是唯一的(每页只有一个)。此外,html/css 属性的约定是使用 kabob-case,即review-rating
  • 你可以通过$("#review_rating[type='hidden']").val(5)Example定位类型

标签: ruby-on-rails rspec capybara


【解决方案1】:

问题是您不应该能够通过常规行为更新隐藏字段,因此不允许这样做。有关更多信息,请参阅讨论 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'");

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

【讨论】:

  • 谢谢。我已经解决了这个问题。你以为我的事情,我应该为什么我写测试代码。我会再考虑一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多