Как использовать Транспортир на веб-сайте не angularjs?

Я нашел раму Protractor, созданную для веб-приложений AngularJS.

Как я могу использовать Protractor на веб-сайте, который не использует AngularJS?

Я написал свой первый тест, и Protractor запускает это сообщение:

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

Ответ 1

Если ваш тест должен взаимодействовать с страницей не angular, обратитесь к экземпляру webdriver напрямую с помощью browser.driver.

Пример из Документов-переводчиков

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();

Ответ 2

Другой подход - установить browser.ignoreSynchronization = true до browser.get(...). Транскаватор не ожидал загрузки Angular, и вы могли бы использовать обычный синтаксис элемента (...).

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();

Ответ 3

Чтобы протестировать сайт без angular, вы должны удалить синхронизацию. для этого используйте следующее:

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

Ответ 4

waitForAngular теперь следует использовать вместо устаревшего свойства ignoreSynchronization.

Следующее waitForAngular руководство берется из документов Protractor для тайм-аутов:

Как отключить ожидание Angular

Если вам нужно перейти на страницу, которая не использует Angular, вы можете отключить ожидание Angular, установив `browser.waitForAngularEnabled(false). Например:

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');

Ответ 5

Лично я не добился успеха в предлагаемых решениях, поскольку элементы DOM не были должным образом загружены вовремя.

Я пробовал много способов обработки этого асинхронного поведения, включая browser.wait с browser.isElementPresent, но ни один из них не удовлетворял.

Что сделал трюк с помощью Protractor, возвращенный Promises из его методов в onPrepare:

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

Ответ 6

Вместо Protractor вы можете использовать для тестирования e2e Testcafe.
Плюсы:

  • Синтаксис
  • ES2016
  • нет необходимости в дополнительных зависимостях, конфигурациях и плагинах браузера.
  • гибкие селекторные функции
  • простая настройка