Capybara::ElementNotFound: 无法找到可见的 link
Capybara::ElementNotFound: Unable to find visible link
我在测试一种方法时遇到了问题,该方法允许管理员用户通过单击 "Promote to Admin" 将其他用户提升为管理员。它位于我的控制器中,我正在为其编写功能测试。我正在使用 Rails 5.1.4。
def promote
@user = User.find(params[:user_id])
if @user.toggle!(:admin)
flash[:success] = "User is promoted to admin."
redirect_to root_path
else
flash[:notice] = "Can't promote."
redirect_to root_path
end
end
这是测试:
describe "Promotion" do
before do
login_as(User.create!(name: "lala", email: Faker::Internet.email,
password: "lalala", admin: true))
visit users_path
end
context "to admin" do
it "promotes user to admin" do
click_link("Promote to Admin", :match => :first)
expect(current_path).to eq user_promote_path
end
end
end
它给我错误:Capybara::ElementNotFound:
无法找到可见 link "Promote to Admin"
我认为这是因为我没有访问正确的页面,尝试以管理员身份登录可能无法正常工作。
任何建议将不胜感激!
如果您想确保您在正确的页面上,您可以使用以下方法进行一些调试:
save_and_open_page
(打开浏览器)
save_and_open_screenshot
(截图打开)
如果一切正常,也许 Capybara 找不到 link: 是屏幕 size/responsive 问题吗?如果是,您可以配置 Capybara 使用的 window 大小(参见此 link)
如果测试仍然没有通过,也许 link 默认不可见?
您可以在 click_link
中添加选项 visible: false
以精确说明。
您的测试失败的最可能原因是您似乎没有创建除您登录用户之外的任何其他用户。如果您还没有,则不会有任何用户显示 "Promote to Admin" 链接。您可以随时保存页面或只做 puts page.html
以确保您认为页面上的内容确实如此。
你的测试的第二个问题是你永远不应该将 eq
匹配器与 current_path 一起使用。您应该使用 Capybara 提供的路径匹配器来进行稳定测试
expect(page).to have_current_path(user_promote_path)
我在测试一种方法时遇到了问题,该方法允许管理员用户通过单击 "Promote to Admin" 将其他用户提升为管理员。它位于我的控制器中,我正在为其编写功能测试。我正在使用 Rails 5.1.4。
def promote
@user = User.find(params[:user_id])
if @user.toggle!(:admin)
flash[:success] = "User is promoted to admin."
redirect_to root_path
else
flash[:notice] = "Can't promote."
redirect_to root_path
end
end
这是测试:
describe "Promotion" do
before do
login_as(User.create!(name: "lala", email: Faker::Internet.email,
password: "lalala", admin: true))
visit users_path
end
context "to admin" do
it "promotes user to admin" do
click_link("Promote to Admin", :match => :first)
expect(current_path).to eq user_promote_path
end
end
end
它给我错误:Capybara::ElementNotFound: 无法找到可见 link "Promote to Admin" 我认为这是因为我没有访问正确的页面,尝试以管理员身份登录可能无法正常工作。 任何建议将不胜感激!
如果您想确保您在正确的页面上,您可以使用以下方法进行一些调试:
save_and_open_page
(打开浏览器)save_and_open_screenshot
(截图打开)
如果一切正常,也许 Capybara 找不到 link: 是屏幕 size/responsive 问题吗?如果是,您可以配置 Capybara 使用的 window 大小(参见此 link)
如果测试仍然没有通过,也许 link 默认不可见?
您可以在 click_link
中添加选项 visible: false
以精确说明。
您的测试失败的最可能原因是您似乎没有创建除您登录用户之外的任何其他用户。如果您还没有,则不会有任何用户显示 "Promote to Admin" 链接。您可以随时保存页面或只做 puts page.html
以确保您认为页面上的内容确实如此。
你的测试的第二个问题是你永远不应该将 eq
匹配器与 current_path 一起使用。您应该使用 Capybara 提供的路径匹配器来进行稳定测试
expect(page).to have_current_path(user_promote_path)