Capybara :: ElementNotFound:无法找到未禁用的“登录”按钮

问题描述 投票:0回答:1

我正在运行验收测试,包括通过/ users / sign_in登录。

我如何设置测试,以便可以在Rspec Capybara测试中“单击”提交按钮?

似乎Devise禁用了Login提交按钮并运行javascript以使事情正常进行。

<%= f.submit "Log in" %> 

产生:

 <input type="submit" name="commit" value="Log In" tabindex="4" data-disable-with="Log In" />

需要设计的数据禁用功能似乎打破了水豚测试。我只想按下面的接受测试按钮。

it "logs in and shows success message" do
  visit '/users/sign_in'
  login_as(user, :scope => :user)
  within(".login-details") do
    fill_in 'Email', with: user.email
    fill_in 'Password', with: 'fakepassword'
  end
  click_button 'Log in'
  expect(page).to have_content 'Success'
end

正在生产:

Capybara::ElementNotFound:  Unable to find button "Log in" that is not disabled

注意:我有多个页面可以登录,可以将用户发送到该页面,此示例是显示此错误的最简单的测试。因此,如果您想知道“为什么他们需要这个?”,我的目标不是不要“确保设计可行”。

ruby-on-rails devise capybara
1个回答
0
投票

data-disable-with属性由Rails UJS用于在单击按钮后更改按钮文本,因此不会影响此测试。查看您发布的HTML元素,按钮的value是“登录”,因此,由于大小写的关系,您需要执行此操作

click_button 'Log In'

而不是“登录”

[我确实想知道为什么您在填写用户名和密码的同一代码中有login_as(user, :scope => :user),当您想绕过实际填写表单并登录时,通常只使用login_as

© www.soinside.com 2019 - 2024. All rights reserved.