При запуске транспортира с браузером phantomjs, запускать тесты можно только один раз
Тестовый код:
описать ('mysite', function(){
var init_url = 'http://localhost/mySite/#/home';
beforeEach(function(){
// driver = new webdriver.Builder().
// withCapabilities(webdriver.Capabilities.phantomjs()).build();
})
it('should click on toolbox and do stuff', function(){
browser.get(init_url);
browser.waitForAngular();
browser.getCurrentUrl().then(function(url){
console.log('current_url', url);
expect(init_url).toEqual(init_url);
})
expect(true).toBe(true);
browser.sleep(2000);
})
результат 1-й раз,
Using the selenium server at http://localhost:9515
data Zoom Pad
class active
mysite
should click on toolbox and do stuff
Finished in 3.94 seconds
1 test, 4 assertions, 0 failures
2-й раз, без перерыва, просто стрелка вверх и введите:
Stacktrace:
Error: Error while running testForAngular: Error Message => 'Detected a pag
e unload event; asynchronous script execution does not work across page loads.'
caused by Request => {"headers":{"Accept":"application/json; charset=utf-8","Co
nnection":"keep-alive","Content-Length":"689","Content-Type":"application/json;c
harset=UTF-8","Host":"localhost:9515"},"httpVersion":"1.1","method":"POST","post
":"{\"script\":\"return (function () {\\n var attempts = arguments[0];\\n var
callback = arguments[arguments.length - 1];\\n var check = function(n) {\\n
try {\\n if (window.angular && window.angular.resumeBootstrap) {\\n
callback([true, null]);\\n } else if (n < 1) {\\n if (window.angular
) {\\n callback([false, 'angular never provided resumeBootstrap']);\\n
} else {\\n callback([false, 'retries looking for angular exceed
третий раз
1) mysite should click on toolbox and do stuff
Message:
Error: ECONNREFUSED connect ECONNREFUSED
Stacktrace:
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (K:\Users\Congwen\AppData\Roaming\npm\node_modu
les\protractor\node_modules\selenium-webdriver\http\index.js:127:16)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1547:9)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:441:14
и в третий раз веб-сервер phantomjs не работает, и его необходимо повторно подключить, а затем он возвращается к результату 1:
какие-нибудь подсказки?
Используется файл конфигурации:
exports.config = {
seleniumAddress: 'http://localhost:9515',
specs: [
'./ptor-tests/mysite-test.js'
],
capabilities: {
browserName: 'phantomjs',
version: '',
platform: 'ANY'
},
//baseUrl: 'http://testapp.example.com/index.html',
rootElement: 'body',
allScriptsTimeout: 11000,
onPrepare: function () {},
jasmineNodeOpts: {
onComplete: function () {},
isVerbose: true,
showColors: true,
includeStackTrace: true,
defaultTimeoutInterval: 30000
}
};
Также я заметил, что иногда нет необходимости в шаге 2, и он сразу переходит к ошибке ECONNECT, а иногда он застревает на шаге 2 для ряда тестов и в конечном итоге завершает работу сервера phantomjs.
1 ответ
Это проблема с Protractor, которая была решена в версии 0.17 и улучшена в 0.18.
Это ошибка с длинным хвостом, но TL;DR заключается в том, что функция.get (url) Protractor на самом деле использует клиентский JavaScript для изменения местоположения; это для того, чтобы он правильно загрузился. К сожалению, побочным эффектом этого дизайна является то, что по какой-то причине PhantomJS требуется несколько секунд для правильной навигации.
Ошибка была устранена путем добавления более длительного тайм-аута в функцию.get.
Github Issue: https://github.com/angular/protractor/issues/85
Соответствующие записи в журнале изменений:
v0.18
(10aec0f) исправление (загрузка страницы): увеличение времени ожидания
Ожидание в 300 мс вызвало проблемы при тестировании IE в Sauce Labs. Это кажется слишком коротким. "browser.get()" всегда истекает. Увеличение его решило нашу проблему.
v0.17
(a0bd84b) fix (pageload): добавьте ожидание во время protractor.get() для решения проблем выгрузки
Некоторые системы не ожидают завершения события выгрузки браузера, прежде чем начать выполнение асинхронного скрипта.
Закрытие #406. Закрытие #85.
Я провел ваш тест локально (с другой страницей, но в остальном с тем же кодом):
Удачного тестирования!