2

次のテストがあります。これらのテストは、Firefox と chrome を使用して、ローカルおよびソース (少なくともほとんどの場合) で実行すると正常に実行されます。

ptor = protractor.getInstance();

baseUrl = protractor.getInstance().params.sBaseUrl;
aRequiredTextFieldsKeys = [
'sFirstName',
'sLastName',
'sStreet',
'sZip',
'sCity'
];


describe('form', function ()
{
var sFormUrl = baseUrl + '#/form';

beforeEach(function ()
{
    ptor.get(sFormUrl);
});


describe('wholeForm', function ()
{

    it('fully filled form => required fields have correct class && submit leads to other route', function ()
    {

        function checkRequiredClass(el)
        {
            expect(el.getAttribute('class')).toContain('ng-valid-required');
        }

        // requried text-fields
        for (var i = 0; i < aRequiredTextFieldsKeys.length; i++) {
            var el = element(by.model('oFormData.' + aRequiredTextFieldsKeys[i]));
            el.sendKeys('a');
            checkRequiredClass(el);
        }

        // email
        var elEmail = element(by.model('oFormData.sEmail'));
        elEmail.sendKeys('jo@jo.de');
        checkRequiredClass(el);

        // birthday
        var elBirthday = element(by.model('oFormData.oBirthday'));
        elBirthday.sendKeys('1.1.1995');
        checkRequiredClass(el);

        // checkboxes
        var elCheck1 = element(by.model('oFormData.bAgb'));
        elCheck1.click();
        checkRequiredClass(elCheck1);

        var elCheck2 = element(by.model('oFormData.bPrivatePolicy'));
        elCheck2.click();
        checkRequiredClass(elCheck2);
        // hack upload bon
        ptor.executeScript(function ()
        {
            var scope = $('#application-form-id').scope();
            scope.oFormData.bBonUploaded = true;
        });

        // submit form
        element(by.className('btn-submit')).click();

        ptor.getCurrentUrl()
            .then(function (url)
            {
                expect(url).toNotBe(sFormUrl);
            });
    });
 });

しかし、インターネット エクスプローラーまたはサファリを起動すると、あらゆる種類のエラーが発生しますが、手動でテストするとページは正常に動作します。IE の場合:

メッセージ: UnknownError: JavaScript エラー (警告: サーバーはスタックトレース情報を提供しませんでした) コマンドの実行時間またはタイムアウト: 97 ミリ秒 ビルド情報: バージョン: '2.30.0'、リビジョン: 'dc1ef9c'、時刻: '2013-02-19 00:15:27' システム情報: os.name: 'Windows Server 2008 R2'、os.arch: 'x86'、os.version: '6.1'、java.version: '1.6.0_35' セッション ID: 42b30348- 8598-4edb-923e-a7019ced6eb0 ドライバー情報: org.openqa.selenium.ie.InternetExplorerDriver 機能 [{platform=WINDOWS, elementScrollBehavior=0, javascriptEnabled=true, enablePersistentHover=true, ignoreZoomSetting=false, browserName=インターネット エクスプローラー, enableElementCacheCleanup=true 、unexpectedAlertBehaviour=dismiss、バージョン=10、cssSelectorsEnabled=true、ignoreProtectedModeSettings=false、requireWindowFocus=false、allowAsynchronousJavaScript=false、handlesAlerts=true、initialBrowserUrl=、nativeEvents=true、takesScreenshot=true}]

エラー: 分度器がページと同期するのを待機中にエラーが発生しました: {"stack":"TypeError: 未定義または null 参照のプロパティ 'get' を取得できません\n at 匿名関数 (未知のスクリプト コード:25:5)\n at匿名関数 (不明なスクリプト コード:21:14)\n at 匿名関数 (不明なスクリプト コード:21:2)","description":"未定義または null 参照のプロパティ 'get' を取得できません","number": -2146823281}

そしてSafariの場合:

UnknownError: ページのアンロード イベントが検出されました。スクリプトの実行は、ページの読み込み全体では機能しません。(警告: サーバーはスタックトレース情報を提供しませんでした) コマンドの継続時間またはタイムアウト: 384 ミリ秒 ビルド情報: バージョン: '2.33.0'、リビジョン: '4e90c97'、時間: '2013-05-22 15:32:38'システム情報: os.name: 'Windows Server 2008 R2'、os.arch: 'x86'、os.version: '6.1'、java.version: '1.6.0_35' セッション ID: null ドライバー情報: org.openqa。 selenium.safari.SafariDriver の機能 [{platform=WINDOWS, javascriptEnabled=true, cssSelectorsEnabled=true, secureSsl=true, browserName=safari, takesScreenshot=true, version=5.1.7}]

私はその理由について混乱しています。私は同じ結果でより簡単なテストを試みました.私はローカルとリモートのURLを試しましwaitForAngularた. それらのどれも、望ましい結果につながりません。助言がありますか?waitptor ignoreAsynch = true

私の分度器設定ファイル:

// A reference configuration file.
    exports.config = {

        seleniumServerJar: null,
        seleniumPort: null,
        chromeOnly: false,
        // Additional command line options to pass to selenium. For example,
        // if you need to change the browser timeout, use
        // seleniumArgs: ['-browserTimeout=60'],
        seleniumArgs: [],
        sauceUser: 'saucesuer',
        sauceKey: 'key',
        allScriptsTimeout: 120000,
        specs: [
            'test/e2e/**/*.js',
        ],

        // https://code.google.com/p/selenium/wiki/DesiredCapabilities
        // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js
        capabilities: {
            'browserName': 'phantomjs',
            'phantomjs.binary.path':'node_modules/phantomjs/bin/phantomjs'
        },


        // Selector for the element housing the angular app - this defaults to
        // body, but is necessary if ng-app is on a descendant of <body>
        rootElement: 'body',

        onPrepare: function ()
        {
    //        driver.manage().timeouts().setScriptTimeout(60000);
        },

        params: {
            sBaseUrl: 'https://dev.com/'

        },
        baseUrl: 'http://localhost:8000',

        framework: 'jasmine',

        // ----- Options to be passed to minijasminenode -----
        //
        // See the full list at https://github.com/juliemr/minijasminenode
        jasmineNodeOpts: {
            // onComplete will be called just before the driver quits.
            onComplete: null,
            // If true, display spec names.
            isVerbose: true,
            // If true, print colors to the terminal.
            showColors: true,
            // If true, include stack traces in failures.
            includeStackTrace: true,
            // Default time to wait in ms before a test fails.
            defaultTimeoutInterval: 120000
        }
    };

それは問題ではないようですが、私は grunt-protractor runner を使用して複数のインスタンスを順番に実行します。

           chrome: {
            options: {
                args: {
                    browser: 'chrome',
                    "idle-timeout": 120
                }
            }
        },
        firefox: {
            options: {
                args: {
                    browser: 'firefox'
                }
            }
        },
        ie9: {
            options: {
                args: {
                    browser: 'internet explorer',
                    version: '9',
                    "idle-timeout": 120
                }
            }
        },
        ie10: {
            options: {
                args: {
                    browser: 'internet explorer',
                    version: '10'
                }
            }
        },
        safari7: {
            options: {
                args: {
                    browser: 'safari',
                    version: '7'
                }
            }
        },
        safari6: {
            options: {
                args: {
                    browser: 'safari',
                    version: '6'
                }
            }
        },
        safari5: {
            options: {
                args: {
                    browser: 'safari',
                    version: '5'
                }
            }
        }
    }

grunt.registerTask('e2eall', [
    'protractor:ie9',
    'protractor:ie10',
    'protractor:safari5',
    'protractor:safari6',
    'protractor:safari7',
    'protractor:firefox',
    'protractor:chrome'
]);
4

1 に答える 1

4

Hugo、これは特定のテスト構成の問題で、Protractor 0.17 で部分的に解決され、0.18 でより明確に解決されました。分度器を最新 (この記事の時点では0.18.1 ) に更新し、問題が解決するかどうかを確認することをお勧めします。

関連する変更ログ エントリ:

v0.18

(10aec0f) 修正 (ページロード): 待機タイムアウトを増やします

Sauce Labs で IE をテストすると、300 ミリ秒の待機が問題を引き起こしました。短すぎるようです。「browser.get()」は必ずタイムアウトします。それを増やすことで私たちの問題は解決しました。

v0.17

(a0bd84b) fix(pageload): アンロードの問題を解決するために protractor.get() 中に待機を追加します

一部のシステムでは、非同期スクリプトの実行を開始する前に、ブラウザーのアンロード イベントが終了するのを待機しませんでした。

#406を閉じます。#85を閉じます。

それが役立つことを願っています!

于 2014-02-08T21:19:00.833 に答える