при запуске транспортира с браузером phantomjs можно запускать тесты только один раз

тестовый код:

описать('мойсайт', функция(){

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.


person user2167582    schedule 27.01.2014    source источник
comment
Не могли бы вы предоставить версии транспортира, веб-драйвера и фантома?   -  person gontard    schedule 03.02.2014
comment
protractor v0.16.1, phantomjs -v1.9.2, webdriver Я использую тот, что идет с транспортиром.   -  person user2167582    schedule 06.02.2014


Ответы (1)


Это проблема с Protractor, которая была решена в версии 0.17 и улучшена в версии 0.18.

Это ошибка с длинным хвостом, но TL; DR заключается в том, что функция Protractor .get(url) фактически использует клиентский JavaScript для изменения местоположения; это необходимо для правильной загрузки. К сожалению, побочным эффектом такого дизайна является то, что по какой-то причине PhantomJS требуется несколько секунд для правильной навигации.

Ошибка была устранена путем добавления более длительного тайм-аута к функции .get.

Проблема Github: 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.

Я выполнил ваш тест локально (с другой страницей, но в остальном с тем же кодом):

Тест

Удачного тестирования!

person Damiya    schedule 08.02.2014
comment
лучшие новости, так как у меня были проблемы с этим инструментом с сентября 2013 года, ваше благословение. - person user2167582; 13.02.2014