Привет, Я работаю над приложением, которое имеет негласный интерфейс и новые модули с угловым на нем. Он находится в переходной фазе. Я пытался использовать транспортир для своих тестов, но некоторые из них требуют регистрации, а страница входа в PHP. Я уже знал, что что-то нужно было сделать, чтобы проверить негласную страницу, которую я сделал в своем conf:
exports.config = {
specs: ['app/**/*.e2e.js'],
baseUrl: 'http://localhost:8099/ma#',
maxSessions: 1,
framework: 'jasmine2',
// rootElement: 'myApp',
multiCapabilities: [
{
browserName: 'chrome',
chromeOptions: {
args: [
'--disable-cache',
'--disable-application-cache',
'--disable-offline-load-stale-cache',
'--disk-cache-size=0',
'--v8-cache-options=off'
]
}
}
],
jasmineNodeOpts: {
isVerbose: false,
showColors: true,
includeStackTrace: true,
defaultTimeoutInterval: 50000
},
// getPageTimeout: 500000,
onPrepare: function () {
browser.driver.ignoreSynchronization = true;
browser.driver.wait(browser.driver.get('http://localhost:8099/Authentication.php'));
browser.driver.sleep(1000);
browser.driver.findElement(by.id('input_login')).sendKeys('login');
browser.driver.findElement(by.id('input_password')).sendKeys('pass');
browser.driver.findElement(by.id('submit_button')).click();
return browser.wait(function(){
browser.get('/ma#/99/page/');
browser.waitForAngular();
}, 1000);
}
};
Затем в моем тесте я делаю следующее:
describe('Test Spec', function () {
it('should get the correct title', function () {
expect(browser.getCurrentUrl()).toBe('http://localhost:8099/ma#/99/page/');
});
});
Но все, что я получаю, - это различные ошибки, связанные с таймаутами, такими как:
Error: Error: Wait timed out after 14074ms
или
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
или печально известный
Uncaught exception: Error while waiting for Protractor to sync with the page: "angular could not be found on the window"
Я здесь потерялся, может кто-нибудь просветить меня?
Поскольку существуют некоторые асинхронные действия, вам необходимо использовать обратный вызов async jasmine следующим образом:
describe('Test Spec', function () {
it('should get the correct title', function (done) {
expect(browser.getCurrentUrl()).toBe('http://localhost:8099/ma#/99/page/');
// this is the callback, use it in a proper place when all validations are done/complete
// usually you call it inside another callback from other async execution i.e. ajax request
done();
});
});
done()
следует использовать там, где вы думаете, что все в тесте выполнено ... например, может сработать комбинация между решением @Girish Sortur и моим.
Если это не-угловая страница, которую вы тестируете, вы должны удалить waitForAngular()
из своего файла conf. Если вы тестируете гибридную угловую + не угловую страницу, используйте нижнюю линию, чтобы не дождаться углового в ваших негласных тестах и не объявлять ее глобально -
browser.ignoreSynchronization = true;
Чтобы разрешить проблемы обратного вызова Async, увеличьте время ожидания, чтобы транспортир ожидал, пока его запрос не вернется обратно в виде обещания, подобного этому
return browser.wait(function(){
browser.get('/ma#/99/page/');
}, 20000); //increase time limit here to increase wait time
Надеюсь это поможет.
ingoreSynchronization
уже включен в conf, как вы можете видеть выше, удаление driver
из него никуда не привело, а время ожидания было 20000, но ничего не изменилось, я все равно получаю тот же результат ... Может ли быть библиотека, которая нарушает поток транспортира?
waitForAngular()
и посмотреть, waitForAngular()
ли она?