2

Cucumber にラジオ ボタンを「選択」させるのに問題があり、誰かが私に健全性チェックをしてくれることを願っています。大量の HTML ジャンクを引用せずに、関連する部分 (print.html から収集したもの) を以下に示します。ボタンによってアクティブ化されるモーダル div 内にあります。そのボタンを「クリック」すると、モーダル ウィンドウが表示されます (Selenium で @javascript シナリオとして実行しています)。

<div class="modal-body pagination-centered">
    <img src="/assets/payment.png" alt="Payment" />
    <form novalidate="novalidate" method="post" id="edit_cart_1" class="simple_form edit_cart" action="/carts/complete" accept-charset="UTF-8">
        <div style="margin:0;padding:0;display:inline">
            <input type="hidden" value="✓" name="utf8" />
            <input type="hidden" value="put" name="_method" />
        </div>
        <div class="control-group hidden cart_property_id">
            <div class="controls">
                <input type="hidden" name="cart[property_id]" id="cart_property_id" class="hidden" />
            </div>
        </div>
        <div id="payment_fat_buttons" class="fat-buttons">
            <div class="vertical-button-wrapper">
                <input type="radio" value="cash" name="cart[payment_type]" id="cart_payment_type_cash_pay" data-property-id="1" />
                <label for="cart_payment_type_cash_pay">Cash</label>
            </div>
            <div class="vertical-button-wrapper">
                <input type="radio" value="credit" name="cart[payment_type]" id="cart_payment_type_credit_pay" data-property-id="1" />
                <label for="cart_payment_type_credit_pay">Credit</label>
            </div>
        </div>
        <div style="display: none;" id="cart_room_number_area_pay">
            <div class="control-group string optional cart_room_number">
                <label for="cart_room_number_pay" class="string optional control-label">Room number</label>
                <div class="controls">
                    <input type="text" value="" size="50" name="cart[room_number]" id="cart_room_number_pay" class="string optional" />
                </div>
            </div>
        </div>
        <input type="checkbox" value="1" style="display: none;" name="receipt" id="receipt" />
        <div class="sell-modal-footer">
            <input type="submit" value="Complete With Receipt" name="commit" id="cart_complete_with_receipt" data_disable_with="Processing..." class="btn btn-danger" />
            <input type="submit" value="Complete Sale" name="commit" data_disable_with="Processing..." class="btn btn-danger" />
        </div>
    </form>
</div>

私は、考えられる限り多くの異なる同等の方法を試しました。最も明白なのは、次のようなラベルまたは ID によるものです。

choose 'cart_payment_type_cash_pay'
choose 'Cash'

エラーが表示されます:

Unable to find radio button "cart_payment_type_cash_pay" (Capybara::ElementNotFound)

モーダル ダイアログや可視性などに関係があるのではないかと思いましたが、#payment_fat_buttonsテスト用にID を導入しました。

find('#payment_fat_buttons').choose('Cash')

DIV OK であることがわかりますが、まだラジオ ボタンではありません。また、ページ全体で :xpath を使用して、次のようなスコープ内で取得しようとしました。

within(:xpath, "//div[@id='payment_methods']") do
  find(:xpath, ".//input[@id='cart_payment_type_cash_pay']").choose
end

外側の DIV も検索できるように動作しますが、ラジオ ボタンは検索できません。エラーが発生します。

Unable to find xpath ".//input[@id='cart_payment_type_cash_pay']" (Capybara::ElementNotFound)

一般的に、ラジオ ボタンではなく、:xpath または CSS 式を使用して、ラジオ ボタンの周りに任意の要素を見つけることができるようです。フォームの送信ボタンも問題なく押すことができます。テストとしてデータ属性を削除してみました-違いはありません。どんな助けでも大歓迎です。とても単純に見えるので、これは私を夢中にさせていますが、それでも私はどこにも行きません。シナリオの大部分ではそれを選択する必要があるので、それが分からない場合は、ばかげた恐ろしい方法に頼らざるを得なくなります。よろしくお願いします...

Gemfile.lock の関連バージョン:

rails (3.2.13)
cucumber (1.3.8)
gherkin (2.12.2)
cucumber-rails (1.4.0)
capybara (2.1.0)
selenium-webdriver (2.35.1)
4

1 に答える 1