AngularJS Webアプリケーション用に作られたProtractorフレームワークを見つけました。
AngularJSを使用していないWebサイトでProtractorを使用するにはどうすればよいですか?
私は最初のテストを書き、分度器はこのメッセージをトリガーします:
Error: Angular could not be found on the page https://www.stratexapp.com/ : retries looking for angular exceeded
テストが非角形ページと対話する必要がある場合は、browser.driver
を使用してWebdriverインスタンスに直接アクセスします。
分度器ドキュメント の例
browser.driver.get('http://localhost:8000/login.html');
browser.driver.findElement(by.id('username')).sendKeys('Jane');
browser.driver.findElement(by.id('password')).sendKeys('1234');
browser.driver.findElement(by.id('clickme')).click();
別のアプローチは、browser.ignoreSynchronization = true
before browser.get(...)。分度器はAngularがロードされるのを待たず、通常のelement(...)構文を使用できます。
browser.ignoreSynchronization = true;
browser.get('http://localhost:8000/login.html');
element(by.id('username')).sendKeys('Jane');
element(by.id('password')).sendKeys('1234');
element(by.id('clickme')).click();
廃止されたignoreSynchronizationプロパティの代わりに、waitForAngularを使用する必要があります。
次のwaitForAngularガイダンスは、タイムアウトに関する分度器ドキュメントから取得されています。
Angularの待機を無効にする方法
Angularを使用しないページに移動する必要がある場合は、 `browser.waitForAngularEnabled(false)を設定することでAngularの待機をオフにすることができます。たとえば、
browser.waitForAngularEnabled(false); browser.get('/non-angular-login-page.html'); element(by.id('username')).sendKeys('Jane'); element(by.id('password')).sendKeys('1234'); element(by.id('clickme')).click(); browser.waitForAngularEnabled(true); browser.get('/page-containing-angular.html');
Non angularサイトでテストするには、同期を削除する必要があります。そのためには次を使用します。
browser.ignoreSynchronisation = true;
browser.get('url');
以下のスニペットを.js仕様ファイルに追加します
beforeAll(function() {
browser.waitForAngularEnabled(false);
});
個人的には、DOM要素が適切にロードされなかったため、提案されたソリューションでは成功しませんでした。
Browser.isElementPresentを使用したbrowser.waitなど、非同期動作を処理する多くの方法を試しましたが、満足のいくものはありませんでした。
このトリックは、onPrepareのメソッドからProtractorが返すPromiseを使用することでした。
onPrepare: () => {
browser.manage().window().maximize();
browser.waitForAngularEnabled(true).then(function () {
return browser.driver.get(baseUrl + '/auth/');
}).then(function () {
return browser.driver.findElement(by.name('login')).sendKeys('login');
}).then(function () {
return browser.driver.findElement(by.name('password')).sendKeys('password');
}).then(function () {
return browser.driver.findElement(by.name('submit')).click();
}).then(function () {
return true;
});
return browser.driver.wait(function () {
return browser.driver.getCurrentUrl().then(function (url) {
return /application/.test(url);
});
}, 10000);
},
https://github.com/angular/protractor/blob/master/spec/withLoginConf.js に触発されました