ruby - Capybara 为什么不填写我的文本字段?
问题描述
当我抓取一个文本字段时,fill_in 不起作用。它说它找不到该字段,即使它似乎知道它是一个字段并且似乎知道它的值?我在这里做错了什么?
f = page.all('input[type=text]').first
f
=> #<Capybara::Node::Element tag="input" path="/html/body/form/ol/li[1]/input">
f.value
=> "parsley"
fill_in f, with: 'paprika'
Capybara::ElementNotFound: Unable to find field #<Capybara::Node::Element tag="input" path="/html/body/form/ol/li[1]/input">
from /Users/test/.rvm/gems/ruby-2.3.3/gems/capybara-3.12.0/lib/capybara/node/finders.rb:301:in `block in synced_resolve'
解决方案
正如@bott 的回答正确指出的那样fill_in
,它需要一个定位器,它是您要填写的输入的名称、ID 或相关标签文本,而不是元素或 CSS 选择器。此外,自 Capybara 3.7.0 以来,您可以调用fill_in
可填充元素并跳过传递定位器(如文档中所述 - “如果没有提供定位器,将对自身或后代进行操作”) - 在您的情况下,这将是
f.fill_in with: 'paprika'
附带说明,如果您想要的只是第一个匹配元素,则无需调用all(...).first
,因为有一个first
方法,但是在一般用法中,您确实希望更喜欢返回单个唯一元素(查找等)的方法,必要时使用范围确保唯一性,而不是all
和first
推荐阅读
- javascript - 我正在编写函数来查看学院的详细信息,它显示了该学院的专业数量。如何在模板中计算数组?
- java - 如何设置 TextField 的值
- flutter - 颤振修复整个应用程序中的底部导航栏
- sql - 如何使用两个内连接和一个 if 案例创建 SQL 查询
- docker - 具有多个存储库的 Azure DevOps 容器作业
- javascript - 在 React 16.x 中,作为 promise 的 useFocusEffect 返回方法会起作用吗?
- roku - 如何在 Roku 的 Main 中打开新场景?
- java - java - 如何在java中使用restful api以json格式返回404?
- python - 根据包含字符串的 0/1 矩阵过滤数据帧行
- ios - CBCentralManager.connect() 不起作用的原因是什么?