Ruby 为什么RSpec 2.13.0/Capybara 2.1.0不能通过它在字段中填充u';Rails 4中此测试中的标签文本是什么?

Ruby 为什么RSpec 2.13.0/Capybara 2.1.0不能通过它在字段中填充u';Rails 4中此测试中的标签文本是什么?,ruby,ruby-on-rails-4,capybara,rspec2,Ruby,Ruby On Rails 4,Capybara,Rspec2,首先,这个测试已经通过很多次了。我今天一直在开发新功能,但由于某种原因,它现在失败了 以下是我的测试规范的相关部分: ... describe "when entering a valid prepay access code after signing in" do before do sign_in user, subdomain: 'bdsp' visit public_root_url(subdomain:

首先,这个测试已经通过很多次了。我今天一直在开发新功能,但由于某种原因,它现在失败了

以下是我的测试规范的相关部分:

    ...
    describe "when entering a valid prepay access code after signing in" do
        before do
            sign_in user, subdomain: 'bdsp'
            visit public_root_url(subdomain: 'bdsp')
            fill_in "code", with: job.code
            click_button "Continue"
        end

        it { should have_selector('h1', text: "My #{job.subject_label}s for #{job.name}") }

        describe "adding a sports prepay subject" do
            let(:submit) { "Add #{job.subject_label}" }
            before do
                puts page.html
                valid_create_player
            end

            it "should create a player" do
                expect { click_button submit }.to change(PrepaySubject, :count).by(1)
            end
    ...
注意我是如何调用
将page.html
放在
valid\u create\u player
之前的,这样我就可以验证我期望的输入/标签是否存在

我的
spec\support\utilities.rb
文件的相关部分:

    def valid_create_player
        fill_in 'First name', with: "Foo"
        fill_in 'Last name', with: "Bar"
        fill_in 'Team',     with: "The Foobars"
        fill_in 'Coach',     with: "Bar Foo"
    end
我的测试结果(仅限于
的单个测试应创建一个播放器
):

Jims Mac mini:msc_rails4_staging jim$rspec spec/requests/public_pages_spec.rb:103
没有正在运行的DRb服务器。改为在本地进程中运行。。。
运行选项:包括{:locations=>{../spec/requests/public_pages_spec.rb=>[103]}
MSC-舞台应用程序|演播室2和#39;s MySmileCentral-受试者
我的第一份工作的球员

1.为每个被拍摄的孩子创建一个播放记录。
2。单击每个播放机旁边的“订购图片”链接进行选择。
注意:您可以在一次交易中为所有播放机的所有图片付款
只需单击“我的玩家”(如上)即可开始订购其他玩家。
3。添加所有要订购的图片后,继续查看购物车(通过单击上面的“购物车”链接)以完成交易。 您尚未添加任何玩家 添加新玩家 名字 姓 团队 教练 个人/团队 好友


  • |
  • |
演播室2
电话:123-456-7890
版权所有并复制2015 Studio 2,
保留所有权利
美国Sampletown F 失败: 1) 公共页面公共用户主页在登录后输入有效的预付费访问代码时添加体育预付费主题应创建一名球员 失败/错误:有效的\u创建\u播放器 Capybara::ElementNotFound: 找不到字段“团队” #./spec/support/utilities.rb:135:in'valid\u create\u player' #./spec/requests/public_pages_spec.rb:100:in'block(5层)in' 以2.85秒完成 1例,1例失败 失败的示例: rspec./spec/requests/public\u pages\u spec.rb:103

我只是不明白,当输出的html中的标签清楚地写着“Team”时,水豚怎么找不到“Team”字段。尤其是因为这在今天之前起了作用——而且起了很多次作用。使用标签文本填写的所有其他测试仍然有效。为什么水豚似乎对我的“团队”字段视而不见?

HTML id区分大小写,并且您已将
团队
标签定义为应用于id
预付费主题团队
,它不会出现在您的页面中。只有id
预付费受试者团队
存在(即
团队
中的小写
t


如果标签元素的
属性中的
大小写与其匹配的输入元素的
id
属性的大小写不匹配,则Capybara无法找到输入元素。

我还知道,我可以简单地更改
填充
以根据其id而不是标签文本查找元素,但我对解决办法不感兴趣。我希望Capybara能够像这里所期望的那样工作。根据找到的Capybara文档,“可以通过其名称、id或标签文本找到该字段。”我已将
Team
标识为要查找的标签文本,该文本清楚地显示在呈现页面上。我的
utilities.rb
充满了大写字段名,我的套件中的所有其他规范都通过了。即使本测试中的
名字
姓氏
字段也能正确填写,尽管输入ID为
预付费受试者姓名
预付费受试者姓氏
    Jims-Mac-mini:msc_rails4_staging jim$ rspec spec/requests/public_pages_spec.rb:103
    No DRb server is running. Running in local process instead ...
    Run options: include {:locations=>{"./spec/requests/public_pages_spec.rb"=>[103]}}
    <!DOCTYPE html>
    <html>
    <head>
        <title>MSC - Staging App | Studio 2&#39;s MySmileCentral - Subjects</title>
            <link data-turbolinks-track="true" href="/assets/public.css" media="screen" rel="stylesheet" />
            <link data-turbolinks-track="true" href="/assets/jm30.css" media="screen" rel="stylesheet" />
            <link data-turbolinks-track="true" href="/assets/print.css" media="print" rel="stylesheet" />
            <script data-turbolinks-track="true" src="/assets/application.js"></script>
            <script data-turbolinks-track="true" src="/assets/public.js"></script>
        <script data-turbolinks-track="true" src="/assets/prepay_subjects.js"></script>

        <!--[if lt IE 9]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    </head>
    <body data-no-turbolink="true">
            <header class="navbar navbar-fixed-top navbar-inverse">
        <div class="navbar-inner">
            <div class="container">
                <nav>
                    <ul class="nav pull-right">
                                <li><a href="/">Home</a></li>
                                <li><a href="/help">Help</a></li>
                                <li id="fat-menu" class="dropdown">
                                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                                        Account <b class="caret"></b>
                                    </a>
                                    <ul class="dropdown-menu">
                                        <li><a href="/users/1">Profile</a></li>
                                        <li><a href="/users/1/edit">Settings</a></li>
                                        <li class="divider"></li>
                                        <li>
                                            <a data-method="delete" href="/signout" rel="nofollow">Sign out</a>
                                        </li>
                                    </ul>
                                </li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>

            <div class="container">

    <h1>My Players for Job Number 1</h1>

    <div class="medium center">
        <p><a id="order-instructions-show" data-toggle="collapse" href="#collapseExample" 
            aria-expanded="false" aria-controls="collapseExample">Toggle ordering instructions</a></p>
        <div class="collapse" id="collapseExample">
            <h4 style="text-align: left">1. Create a player record for each child being photographed.<br />2. Click the 'Order Pictures' link (next to each player) to make your selection.<br />&nbsp &nbsp &nbsp <span style="font-size: 80%; line-height: 125%;">NOTE:  You can pay for all pictures for all of your players in ONE transaction!<br />&nbsp &nbsp &nbsp Just click 'My Players' (above) to start ordering for another player.</span><br />3. After adding all the pictures you wish to order, proceed to viewing your cart (by clicking the 'Cart' link above) to complete your transaction.</h4>
        </div>
    </div>

            <h3>You have not added any players yet</h3>

        <div id="no-prepay-subjects-bkgd">
            <div class="well small center">
                <h1>Add a New Player</h1>
                <form accept-charset="UTF-8" action="/prepay_subjects" class="form-horizontal" id="new_prepay_subject" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>

    <fieldset>
        <input id="job_id" name="prepay_subject[job_id]" type="hidden" value="1" /> 
        <input id="public_user_id" name="prepay_subject[public_user_id]" type="hidden" value="1" />

        <div class="control-group">     
            <label class="control-label" for="prepay_subject_first_name">First name</label>
            <div class="controls">
                <input id="prepay_subject_first_name" name="prepay_subject[first_name]" type="text" />
            </div>
        </div>

        <div class="control-group">     
            <label class="control-label" for="prepay_subject_last_name">Last name</label>
            <div class="controls">
                <input id="prepay_subject_last_name" name="prepay_subject[last_name]" type="text" />
            </div>
        </div>

        <div class="control-group">
            <label class="control-label" for="prepay_subject_Team">Team</label>
            <div class="controls">
                <input id="prepay_subject_team" name="prepay_subject[team]" type="text" />
            </div>
        </div>

        <div class="control-group">
            <label class="control-label" for="prepay_subject_Coach">Coach</label>
            <div class="controls">
                <input id="prepay_subject_coach" name="prepay_subject[coach]" type="text" />
            </div>
        </div>

        <table style="width: 400; margin-left: 100px;">
                <tr>
                    <td style="text-align: left; width: 175px">
                        <input checked="checked" id="prepay_subject_buddy_false" name="prepay_subject[buddy]" type="radio" value="false" /> Individual/Team
                    </td>
                    <td style="text-align: left; width: 225px">
                        <input id="prepay_subject_buddy_true" name="prepay_subject[buddy]" type="radio" value="true" /> Buddy <br />
                    </td>
                </tr>
                <tr>
                    <td style="text-align: left; width: 175px"></td>
                    <td style="text-align: left; width: 225px">
                        <a href="http://assests0_bop_heroku_com.s3.amazonaws.com/images/jm30/whats_a_buddy_shot.png" onclick="window.open(this.href,&#39;create_company&#39;, &#39;height=580, width=630&#39;);return false;" title="Click here for more information about buddy photos">What&#39;s a buddy shot?</a>
                    </td>
                </tr>
                <br />
        </table>
        <br />              
    </fieldset>
                    <input class="btn btn-large btn-primary pull-center" name="commit" type="submit" value="Add Player" />
    </form>     <div class="clearfix"></div><!-- keeps the submit button properly wrapped in 'well' div -->
            </div>
        </div>


                <footer>
        <nav>
            <ul>
                <li><a href="/about">About</a></li> |
                <li><a href="/contact">Contact</a></li> |
                <li><a href="http://news.railstutorial.org/">News</a></li>
            </ul>
        </nav>
            <div class="left text-left">
                    Studio 2<br />

                    Phone: 123-456-7890<br />

            </div>
            <div class="right text-right">
                    Copyright &copy 2015 Studio 2,<br />All Rights Reserved <br />

                        Sampletown, US
            </div>
    </footer>

            </div>
    </body>
    </html>
    F

    Failures:

        1) Public Pages public users home page when entering a valid prepay access code after signing in adding a sports prepay subject should create a player
             Failure/Error: valid_create_player
             Capybara::ElementNotFound:
                 Unable to find field "Team"
             # ./spec/support/utilities.rb:135:in `valid_create_player'
             # ./spec/requests/public_pages_spec.rb:100:in `block (5 levels) in <top (required)>'

    Finished in 2.85 seconds
    1 example, 1 failure

    Failed examples:

    rspec ./spec/requests/public_pages_spec.rb:103