首页 > 解决方案 > 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'

标签: rubyformscapybara

解决方案


正如@bott 的回答正确指出的那样fill_in,它需要一个定位器,它是您要填写的输入的名称、ID 或相关标签文本,而不是元素或 CSS 选择器。此外,自 Capybara 3.7.0 以来,您可以调用fill_in可填充元素并跳过传递定位器(如文档中所述 - “如果没有提供定位器,将对自身或后代进行操作”) - 在您的情况下,这将是

f.fill_in with: 'paprika'

附带说明,如果您想要的只是第一个匹配元素,则无需调用all(...).first,因为有一个first方法,但是在一般用法中,您确实希望更喜欢返回单个唯一元素(查找等)的方法,必要时使用范围确保唯一性,而不是allfirst


推荐阅读