web-dev-qa-db-ja.com

Anglejs以外のWebサイトでProtractorを使用する方法は?

AngularJS Webアプリケーション用に作られたProtractorフレームワークを見つけました。

AngularJSを使用していないWebサイトでProtractorを使用するにはどうすればよいですか?

私は最初のテストを書き、分度器はこのメッセージをトリガーします:

Error: Angular could not be found on the page https://www.stratexapp.com/ : retries looking for angular exceeded
75
Abdelkrim

テストが非角形ページと対話する必要がある場合は、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();
72
Eitan Peer

別のアプローチは、browser.ignoreSynchronization = truebefore 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();
122

廃止された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');
10
MatthewThomasGB

Non angularサイトでテストするには、同期を削除する必要があります。そのためには次を使用します。

browser.ignoreSynchronisation = true;
browser.get('url');
2
randomguy

以下のスニペットを.js仕様ファイルに追加します

beforeAll(function() {
    browser.waitForAngularEnabled(false);
});
1
Anil Kumar

個人的には、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 に触発されました

0
Matthieu Dsprz