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>