Как использовать Транспортир на веб-сайте не 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
- нет необходимости в дополнительных зависимостях, конфигурациях и плагинах браузера.
- гибкие селекторные функции
- простая настройка