Несколько тайм-аутов с использованием транспортира с угловым неугловым веб-сайтом

0

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

Я здесь потерялся, может кто-нибудь просветить меня?

  • 0
    Вы получили ответ на этот вопрос?
  • 0
    Нет еще, я был на небольшом перерыве, поэтому я собираюсь возобновить работу над этим ...
Теги:
protractor
jasmine

2 ответа

1

Поскольку существуют некоторые асинхронные действия, вам необходимо использовать обратный вызов 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(); 
  });
});
  • 0
    это не сработало, я все еще получаю тайм-ауты, а также кажется, что webdrive многократно перезагружает страницу (дисплей мерцает) ... В любом случае, спасибо ...
  • 1
    Как я уже говорил во встроенных комментариях, done() следует использовать там, где вы думаете, что все в тесте выполнено ... например, может сработать комбинация между решением @Girish Sortur и моим.
Показать ещё 3 комментария
0

Если это не-угловая страница, которую вы тестируете, вы должны удалить waitForAngular() из своего файла conf. Если вы тестируете гибридную угловую + не угловую страницу, используйте нижнюю линию, чтобы не дождаться углового в ваших негласных тестах и не объявлять ее глобально -

browser.ignoreSynchronization = true;

Чтобы разрешить проблемы обратного вызова Async, увеличьте время ожидания, чтобы транспортир ожидал, пока его запрос не вернется обратно в виде обещания, подобного этому

return browser.wait(function(){
    browser.get('/ma#/99/page/');
}, 20000); //increase time limit here to increase wait time

Надеюсь это поможет.

  • 0
    ingoreSynchronization уже включен в conf, как вы можете видеть выше, удаление driver из него никуда не привело, а время ожидания было 20000, но ничего не изменилось, я все равно получаю тот же результат ... Может ли быть библиотека, которая нарушает поток транспортира?
  • 1
    Надеясь, что ваш сайт не угловой, вы пытались удалить waitForAngular() и посмотреть, waitForAngular() ли она?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню