【问题标题】:Watir-Webdriver for Chrome and IE - getting nil error when automating text field input用于 Chrome 和 IE 的 Watir-Webdriver - 自动输入文本字段时出现零错误
【发布时间】:2014-02-28 21:23:57
【问题描述】:

我正在使用 Watir-Webdriver。该脚本在 Firefox 上适用于我,但是在 Google 和 IE 上,一旦我将数据输入到模式中,它就会立即中断。我还注意到 IEDriver 与 ChromeDriver 和 Firefox 相比,在文本字段中输入文本非常慢,这也会破坏脚本。

这是我在运行 ChromeDriver 或 IEDriver 时遇到的错误:

    ===============================================================================
    Failure: <nil> is not true.
    test_orderjellybean(TestShoppingCart)
    C:/Users/cameron.sampson/Desktop/shopping cart auto/shoppingcart-jellybean.rb:69
    :in `test_orderjellybean'
         66:
         67:                # Select Monthly Plans for data, minutes and text
         68:                assert @b.div(:class, 'modal-body')
      => 69:                assert @b.text_field(:id, 'ZipCode').set '92130'
         70:                assert @b.button(:value, 'Confirm').click
         71:                sleep 5
         72:
    ===============================================================================

我已经更新了 ChromeDriver、Watir-Webdriver 和 Selenium-Webdriver。是否应该安装其他一些 gem 以使跨浏览器自动化功能更强大?

这是我运行它的 HTML 源代码:

    <div class="modal fade" id="modal-checkplans">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-body">
                    <h3>Confirm Coverage</h3>
                    <div class="alert alert-danger fade hidden">
                        <p><strong>We are sorry :(</strong>
                            <br>
                            This product should work almost anywhere in the U.S. where it is available, your address is one of the few locations where coverage is not available. If you feel that this is an error, please call customer service at 000-000-0000. </p>
                    </div>
                    <form class="form-ajax form-inline" action="/Cart/cart/checkservice" data-callback="OnCheckNetworkCoverageComplete">
                        <label for="PostalCode">Enter the zip code where the phone will be used most often:</label>
                        <div class="input-group col-4 col-8">
                            <input autofocus="autofocus" class="form-control" data-val="true" data-val-length="Postal code must be between 5 and 10 digits." data-val-length-max="10" data-val-length-min="5" data-val-required="*required" id="ZipCode" name="ZipCode" type="text" value="" />
                            <span class="input-group-btn">
                                <input type="submit" class="btf btf-info" data-loading-text="Checking..." value="Confirm" />
                            </span>
                        </div>
                        <span class="field-validation-valid" data-for="ZipCode" data-replace="true"></span>
                    </form>
                </div>
            </div>
        </div>
    </div>

【问题讨论】:

    标签: watir watir-webdriver selenium-chromedriver


    【解决方案1】:

    Chromedriver 和 Firefoxdriver 似乎与设置文本字段时返回的值不一致:

    # Chrome
    @b.text_field(:id, 'ZipCode').set '92130'
    #=> ""
    
    # Firefox
    @b.text_field(:id, 'ZipCode').set '92130'
    #=> nil
    

    这就是为什么您的测试在 Firefox 而不是 Chrome 上失败的原因 - 即 nil 值将使断言失败。

    也就是说,我认为根本问题是assert 的使用方式。在这些行中执行断言是没有意义的。

    例如,行:

    assert @b.div(:class, 'modal-body')
    

    总会过去的。 div 方法总是返回一个 Watir 对象,无论该元素是否存在于页面上。这意味着assert 永远不会失败。

    您应该删除您显示的行的assert。然后添加一个assert 来测试一个特定的值。

    【讨论】:

    • 谢谢,删除其中的大部分可以让脚本运行。我对断言的理解更好。
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多