ruby-on-rails - 不能为隐藏属性输入标签的值赋值
问题描述
我想做的事
我想为隐藏属性的 iput 标记的值分配一个值,如下面的 SystemSpec 所示。
<input id = "review_rating" type = "hidden" name = "review[rating]">
我试过的
- 将可见属性设置为 false。
find('#review_rating', visible:false).set('5')
- 尝试 name 属性而不是 id 作为第一个参数
find('input[name="review[rating]"]', visible:false).set('5')
如果你写第一个选项,FeatureSepc 将通过测试。
解决方案
问题是您不应该能够通过常规行为更新隐藏字段,因此不允许这样做。有关更多信息,请参阅此处的讨论。
问题是您为什么要对此进行测试 - 隐藏字段是否由页面上的另一个元素操作?如果是这样,找到并互动(点击?)。
另一方面,使用 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'");
希望这里有帮助 - 让我知道你的进展:)
推荐阅读
- javascript - 当在 map() 中调用函数时,控制台中的无限打印
- neural-network - 找出两个卷积神经网络(CNN)的输出之间的距离,即连体网络
- objective-c - 是否可以从同一个工作区中的不同项目访问一个类?
- python - 支持向量回归中的 epsilon 是否应该缩放?
- flutter - Flutter - 在 setState 更改其位置后获取 RenderBox 位置
- hibernate - 我有没有办法将代码转换为使用批处理,以便立即执行并提高性能?
- laravel - Laravel 文件缓存:我们可以设置文件权限吗?
- c# - 此元素的 Xpath 或 Css 选择器 - HELPP
- vb.net - 循环中的局部字符串变量初始化
- outlook - OfficeJS - Outlook 插件