Cucumber + Capybara - 填写表格的难度 - 未找到元素

时间:2014-08-09 05:28:13

标签: testing cucumber capybara

我正在一个已经完成的项目中执行我的 hello world 测试应用程序,并且遇到了一些情况,并对我所看到的情况感到困惑。

我正在使用:

  • Capybara
  • Cucumber
  • 和selinium web驱动程序,我们需要Javascript
  • Sinatra应用程序上的所有这些
  • RSpec分开,但这不是兴趣。

问题:

cucumber features/#{feature_name}.feature运行黄瓜测试时,并且考虑到我在特定页面上。我可以通过CSS ID找到元素,但无法点击它们。

When(/^I log in with email "(.*?)" and password "(.*?)"$/) do |email, password|
  step %{I am on login page}

  expect(page).to have_css('#login-form')
  expect(page).to have_css('#login-button')

  within("#login-form") do 
    fill_in '#username', with: email
    fill_in '#password', with: password
    click_button 'dfalkjsdfalsdkfja dflkjasdf alkdsjfasd lfkjsf s'  # Which should fail, but odesn't :'(
  end

  click_button 'Sign In'
  # click_button '#login-button'   # This fails
end

即使我对#login-form使用完全随机的不存在ID,也会通过以下测试。正如你所看到的,我有一个带有一些愚蠢文本的按钮。如果我把它作为ID,没有区别。测试通过了。

但是当我在没有内部块的情况下单独使用它们时,找不到元素。

但在上方,您会看到expect(page).to语句找到它们。

以上是与我在Capybara repo。

中看到的示例相似的内容

我的问题:

  • 我可以使用CSS selectors来定位前:#login-form
  • 使用within块中的非现有选择器是否会失败?我的情况没有。
  • 为什么像fill_in '#password', with: 'password'这样的东西在上面的断言好像找不到的时候会说找不到元素?
  • 我是一个新手,所以建议在设置方面可能出现问题。示例链接也很棒。

PS:

忘记询问,考虑到回购中的示例,以下fill_in块中的“电子邮件”是什么。似乎不是元素的id。

fill_in 'Email', :with => 'user@example.com'

更新

经过一些游戏,我发现以下工作(找到元素并填充/点击它)。但是within块没有填写表单。在解释时,任何配置都可以影响within块。

When(/^I log in with email "(.*?)" and password "(.*?)"$/) do |email, password|
  step %{I am on login page}

  find('form#login-form').find('input#username').set email
  find('form#login-form').find('input#password').set password
  find('form#login-form').find('#login').click

  within("form#login-form") do 
    fill_in 'input#username', with: email
    fill_in 'input#password', with: password
    click_button '#login'
  end

end

0 个答案:

没有答案