10

Angular が読み込まれて実行されていることを分度器に認識させることができないようです。Chrome を開くと、アプリがブラウザーに完全に読み込まれるため、Angular が正しく読み込まれて実行されていることがわかります。

構成ファイル:

exports.config = {
seleniumServerJar: 'C:/Dev/PrismWeb/selenium/selenium-server-standalone-2.35.0.jar',

seleniumPort: null,

chromeDriver: 'C:/Dev/PrismWeb/selenium/chromedriver.exe',

seleniumArgs: [],

seleniumAddress: null,

allScriptsTimeout: 110000,

specs: ['c:/dev/prismweb/test/e2e/*.js'],

capabilities: {'browserName': 'chrome'},

baseUrl: 'http://localhost:8080',

rootElement: 'html',

jasmineNodeOpts: {
    onComplete: null,
    isVerbose: true,
    showColors: true,
    includeStackTrace: true,
    defaultTimeoutInterval: 30000
}
};

実行しようとしているテストが 1 つしかないのですが、Protractor が Angular を見つけられないために失敗します。

テスト:

describe('homepage loads: ', function(){
var ptor;

    ptor = protractor.getInstance();

    beforeEach(function(){
        ptor.get('/');
    });

it('should load the prism homepage: ', function(){
    var usernameField = ptor.findElement(protractor.By.id("username"));
    //expect(usernameField).toBeDefined();
});
});

これは私が得るエラーです:

UnknownError: javascript エラー: angular が定義されていません (セッション情報: chrome=30.0.1599.69) (ドライバー情報: chromedriver=2.2,platform=Windows NT 6.1 SP1 x86_64) (警告: サーバーはスタックトレース情報を提供しませんでした) コマンド期間またはタイムアウト: 19 ミリ秒 ビルド情報: バージョン: '2.35.0'、リビジョン: 'c916b9d'、時間: '2013-08-12 15:42:01' システム情報: os.name: 'Windows 7'、os.arch : 'amd64'、os.version: '6.1'、java.version: '1.7.0_21' セッション ID: 1ef7dcd7c5fc9c4e9e1dede050002adf ドライバー情報: org.openqa.selenium.chrome.ChromeDriver 機能 [{platform=XP、acceptSslCerts=true、javascriptEnabled =true, browserName=chrome, chrome={chromedriverVersion=2.2}, rotatable=false, locationContextEnabled=true, version=30.0.1599.69, cssSelectorsEnabled=true,databaseEnabled=true、handlesAlerts=true、browserConnectionEnabled=false、webStorageEnabled=true、nativeEvents=true、applicationCacheEnabled=false、takesScreenshot=true}]

ng-app 属性を body タグに移動しようとしましたが (それに応じて構成を変更しました)、同じエラーが発生しました。html タグに ng-controller 属性もあるのですが、それを body に移動して、html タグの ng-app 属性をそのままにしてみましたが、結果は同じでした。なぜこれが失敗するのかについて誰かが洞察を持っていますか?

編集: 役立つかもしれないメモをいくつか。上記のテストを更新して、手動のブートストラップ作業を含めました。Angular とすべてのモジュールのスクリプト タグは、ページの下部、終了 BODY タグの直前にあります。HTML タグには、まだ ng-app="myApp" 属性と ng-controller="baseController" 属性があります。テストでアプリを手動でブートストラップしようとすると、次のようになります。

ReferenceError: angular is not defined

私が心配しているもう 1 つのことは、私たちが使用するモジュールの 1 つが絶対に "$" を jQuery にマップする必要があるため、次のようにマップすることです。

<script type="text/javascript">
    var $jq=jQuery.noConflict();
    var $=jQuery.noConflict();
</script>

ng-app が含まれている場所:

<!DOCTYPE html>
<html ng-app="prismApp" ng-controller="baseController">
<head>
4

3 に答える 3

3

これをテストファイルに含めてみてください:

browser.ignoreSynchronization = true;

テストの angular との同期をオフにして、機能させます。

于 2015-07-14T10:38:32.023 に答える
0

Angular アプリケーションのブートストラップに ng-app を使用していますか? または、アプリケーションを手動でブートストラップしていますか?

rootElement「html」に設定されている構成ファイルでそれがわかります。

デフォルトでは、分度器はアプリのルートが body タグにあると想定しています。タグがアプリケーションのAngularブートストラップの場所にない場合は、<html>構成ファイルのルート要素をAngularの最初のブートストラップの場所に変更してみてください(手動であるか、ng-appディレクティブを使用しているかに関係なく)。これはタイミングの問題に非常に役立ち、分度器の実行を高速化します。

于 2014-07-18T13:54:48.520 に答える