Транспортир: count () не работает вне цикла обещаний - PullRequest
0 голосов
/ 04 августа 2020
var notifications = element.all(by.xpath("//div[@class='notification-content']"));
notifications.count().then(function (value) {
    console.log(value);
});
 console.log(value);

Как вывести значение вне обещания l oop, которое нужно сравнить с другой переменной? Мне нужно, чтобы это «значение» сравнивалось не в выражении except. Пожалуйста, направьте меня.

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

В этом сценарии лучше использовать async / await. Однако, если вам нужно использовать подход, который вы разместили в своем фрагменте, вы сделаете это так.

var notifications1 = element.all(by.xpath("//div[@class='notification-content1']"));
var notifications2 = element.all(by.xpath("//div[@class='notification-content2']"));

notifications1.count().then(function (count1) {
  notifications2.count().then(function (count2) {
    expect(count1).toEqual(count2);
  }
});
0 голосов
/ 09 августа 2020

Попробуйте это!

используйте async / await вместо цепочки обещаний. Написание кода с цепочкой обещаний немного сложно и не дает гибкого подхода к написанию кода. https://www.protractortest.org/# / asyn c -await

let notifications;
let value;

async GetElementCount() {
   notifications = await element.all(by.xpath('//div[@class=\'notification-content\']'));
   return notifications.count();
}

value = await GetElementCount();

теперь вы можете распечатать значение снаружи и сравнить с другой переменной.

0 голосов
/ 04 августа 2020

Это типичный пример асинхронного программирования в JavaScript. Вы можете сослаться на Protractor: в чем разница между ignoreSynchronization и async / await в Protractor этот ответ, чтобы понять, как происходит выполнение

Теперь, чтобы ответить на ваш вопрос, вы можете использовать async / await вместо. затем сохраните значение.

it('should get count', async () => {
  await browser.get("url of application");
  let count = await element.all(by.xpath("//div[@class='notification- content']")).count();
  console.log(count);
});

Надеюсь, это решит ваш ответ

Изменить:

it("test", () => {
    let count1, count2;
    browser.get("url of application");
    var notifications = element.all(by.xpath("//div[@class='notification-content']"));
    count1 = notifications.count();
    var notifications = element.all(by.xpath("//div[@class='notification-content']"));
    count2 = notifications.count();
    expect(count1).toBe(count2);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...