find_field 和 Poltergeist/Capybara

find_field with Poltergeist/Capybara

我对 Poltergeist 有疑问。我无法让驱动程序在页面上定位字段。我想要做的是在开始添加新文本之前执行一些 js 以确保输入字段为空。我有一个标签为 os "Skill list" 且 ID 为 "user_skill_list" 的字段。为了使步骤更通用,我想通过标签名称找到该字段,然后获取 ID。

And(/^I delete the content of "([^"]*)"$/) do |label|
  field_id = page.find_field(label).native.attributes['id'].value
  page.execute_script("$('#{field_id}').val('');")
end 

错误信息如下:

@javascript
  Scenario: Update user by removing                            # features/godmin/skills.feature:36
    Given "Thomas" skills are "rspec, testing"                 # features/step_definitions/godmin_steps.rb:63
    And I click on "Edit" for "Thomas"                         # features/step_definitions/godmin_steps.rb:43
    And I delete the content of "Skill list"                   # features/step_definitions/godmin_steps.rb:69
      Unable to find field "Skill list" (Capybara::ElementNotFound)
      ./features/step_definitions/godmin_steps.rb:70:in `/^I delete the content of "([^"]*)"$/'
      features/godmin/skills.feature:39:in `And I delete the content of "Skill list"'

```

我的黄瓜设置非常简单。

# features/support/env.rb
...
require 'capybara/poltergeist'

Capybara.javascript_driver = :poltergeist
Capybara.default_max_wait_time = 5
...

谢谢。如果我应该澄清我的问题,请告诉我。

假设您的 html 类似于

<label for="user_skill_list">Skill list</label>
<input id="user_skill_list"/>

然后

page.find_field('Skill list').set('')

应该找到该字段并将其清除。如果它没有找到元素,则有两种可能性。

  1. 该元素在页面上不可见

  2. 正在应用 CSS 正在更改 "Skill list"

  3. 的大小写
  4. 您的 html 中存在拼写错误,因此该标签实际上并未与该字段相关联。您可以通过 page.find_field('user_skill_list').set('') 来测试它,因此不涉及标签

注意:您只需执行 page.find_field('Skill list')[:id] 即可获得 ID,而不必求助于 .native.xxxx - 尽管此用例并不真正需要它