У меня есть проект angular 5.x. Я пытаюсь выполнить несколько тестов e2e с помощью Protractor. У меня запущено несколько простых тестов, которые просто проверяют заголовок браузера и наличие основных элементов.

Сейчас я пытаюсь провести более сложные тесты, в которых я взаимодействую со страницей. К сожалению, щелчок по элементу вызывает неприятное зависание, которое никогда не возвращается (даже через 30-60 секунд). Есть идеи, что могло быть причиной этого, или как я мог бы даже устранить неполадки?

Работающие тесты:

it('should have correct title', () => {
  expect(browser.getTitle()).toEqual("My App");
});

it('should have a login button', () => {
  let loginButton = element(by.id('btnLogin'));
  var untilLoginIsVisible = ExpectedConditions.presenceOf(loginButton);
  browser.wait(untilLoginIsVisible, 20000);
  expect(loginButton.isDisplayed()).toEqual(true);
});

Зависающий тест - обратите внимание на сходство с успешным тестом выше

it('show login transition', () => {
  let loginButton = element(by.id('btnLogin'));
  var untilLoginIsVisible = ExpectedConditions.presenceOf(loginButton);
  browser.wait(untilLoginIsVisible, 20000);

  //EITHER ONE OF THESE FAILS, AND JUST HANGS FOREVER
  loginButton.click().then(() => { console.log("Clicked, yo!"); });
  browser.actions().mouseMove(loginButton).mouseDown(loginButton).mouseUp().perform();
});

Другая информация:

  • Я пробовал другие кнопки на странице - тот же результат
  • Хотя я не получаю ошибок, через ~ 60 секунд я получаю на выходе F, указывающий на неудачный тест, но он никогда не переходит к следующему тесту.
  • Примерно через 2 минуты он начинает выплевывать ERROR:process_metrics.cc(105)] NOT IMPLEMENTED, что, я не думаю, является источником проблемы (похожие несвязанные жалобы здесь)
1
BRass 5 Янв 2018 в 02:17

1 ответ

Лучший ответ

Я наконец нашел для этого причину. Я использую multiCapabilities для тестирования различных браузеров и размеров. К сожалению, моей первой возможностью было использование мобильной эмуляции:

   chromeOptions: {
     'mobileEmulation': {
       'deviceName': 'iPhone 4'
     },

Это было причиной полного зависания кликов. Ниже приводится дополнительная информация о том, что работает, а что нет.

Работает с эмуляцией немобильных устройств, зависает при эмуляции мобильных устройств

loginButton.click().then(() => { console.log("Clicked, yo!"); });

Работает с эмуляцией мобильных устройств

browser.touchActions().tap(loginButton).perform().then(() => { console.log("Tapped, yo!"); });

К сожалению, что бы ни было причиной этого, транспортир полностью зависает и не дает никаких ошибок. Переход к следующей возможности сделал бы это более очевидным. Еще один вопрос, который мне нужно будет решить: нужно ли во всех тестах мобильной эмуляции использовать tap() вместо click() ...

0
BRass 5 Янв 2018 в 17:38