与Poltergeist / Capybara的find_field

时间:2016-02-24 06:25:32

标签: cucumber capybara poltergeist

我遇到了Poltergeist的问题。我无法让驱动程序在页面上找到一个字段。我想要做的是在开始添加新文本之前执行一些js以确保输入字段为空。我有一个带有标签os“技能列表”和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
...

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

1 个答案:

答案 0 :(得分:1)

假设您的html类似于

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

然后

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

应找到该字段并清除它。如果它没有找到元素,那么有几种可能性。

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

  2. 正在应用的CSS正在改变&#34;技能列表的情况&#34;

  3. 您的html中存在拼写错误,因此标签实际上并未与该字段相关联。您只需执行page.find_field('user_skill_list').set('')即可对此进行测试,因此标签不涉及

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