gpt4 book ai didi

ruby-on-rails - capybara 找不到删除操作的用户

转载 作者:行者123 更新时间:2023-11-28 21:29:28 24 4
gpt4 key购买 nike

我正在使用 RSpec (v. 3.1.0) 和 Capybara (v. 2.4.3) 来测试我的 Rails 4 应用程序。我的用户删除 spec.rb 包含以下代码:

it "is successful when clicking the destroy link" do
visit "/users"
save_and_open_page
within "#user_#{user.id}" do
click_link "Destroy"
end

expect(page).to have_content("User was successfully destroyed.")

capybara 抛出以下错误:

 1) Deleting User is successful when clicking the destroy link
Failure/Error: within "#user_#{user.id}" do
Capybara::ElementNotFound:
Unable to find css "#user_509"

Save_and_open_page 显示 FactoryGirl 为测试创建了一个用户。错误消息表明用户的 id 是 509。我的程序代码(删除方法)按预期工作,所以问题似乎是我的测试代码。我可以做些什么来帮助 Capybara 找到用户?感谢您的帮助!

更新:这是 HTML 源代码:

<!DOCTYPE html>
<html>
<head>
<title>Users | App </title>
<link data-turbolinks-track="true" href="/assets/appointments.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/cardio_exercises.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/custom.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/members.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/sessions.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/static_pages.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/strength_exercises.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/trainers.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/users.css?body=1" media="all" rel="stylesheet" />
<link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/bootstrap.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/appointments.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/cardio_exercises.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/members.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/sessions.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/static_pages.js?body=1"></script>
<script data-turbolinks-track="true" src="/assets/strength_exercises.js?body=1"></script>


  • 首页
  • Help
  • Log in
  • <div class="container">
    <h1>Listing Users</h1>

    <table>
    <thead>
    <tr>
    <th>User Name</th>
    <th>Email</th>
    <th>Member</th>
    <th>Trainer</th>
    <th colspan="3"></th>
    </tr>
    </thead>

    <tbody>
    <tr>
    <td>ColeCole</td>
    <td>xx@xxx.com</td>
    <td>true</td>
    <td>false</td>
    <td><a href="/users/14">Show</a></td>
    <td><a href="/users/14/edit">Edit</a></td>
    <td><a data-confirm="Are you sure?" data-method="delete" href="/users/14" rel="nofollow">Destroy</a></td>
    </tr>
    </tbody>
    </table>

    <br>

    <a href="/users/new">New User</a>

    <footer class="footer">
    <small>
    The <a href="https://xxxx.herokuapp.com/">xxxx</a>
    by <a href="https://xxxx.herokuapp.com/">xxxx</a>
    </small>
    <nav>
    <ul>
    <li><a href="/contact">Contact</a></li>
    <li><a href="/about">About</a></li>
    <li><a href="https://xxxx.herokuapp.com/#">xxxx</a></li>
    </ul>
    </nav>
    </footer>
    <pre class="debug_dump">--- !ruby/hash:ActionController::Parameters
    action: index
    controller: users
    </pre>
    </div>
    </body>
    </html>

    最佳答案

    如果页面上只有一个删除按钮,这应该可以工作:

    it "is successful when clicking the destroy link" do
    visit "/users"
    click_link "Destroy"
    expect(page).to have_content("User was successfully destroyed.")

    编辑:我假设您对 CSS 选择器不是很熟悉。对于 Capybara,当您说:

    #user_#{user.id}

    您不是在抓取诸如“user_509”之类的文本,而是在抓取标识为“user_509”的 DOM 元素。因此,要让 Capybara 在您的代码中找到该元素,您必须具有如下内容:

    <a id="user_509" data-confirm="Are you sure?" data-method="delete" href="/users/14" rel="nofollow">Destroy</a>

    仅仅有一个文本字段是不够的,因为文本不是 DOM 的一部分。

    关于ruby-on-rails - capybara 找不到删除操作的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28290803/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com