возвращая значение из .getAttribute, находясь внутри спецификации - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть функция внутри класса pageObject:

async getSingleIdFromDrawerUsing(test1, test2) {
    await browser.wait(async () => {
      return await element(by.xpath('//h3[.="' + test1 + '"]/..' +
        '//something//div[@attr1"' + test2 + '"]')).getAttribute('attr2')
        .then(async (value) => {
          const item = value;
          console.log(item);
          return await item;
      });
    });
  }

эта функция прекрасно работает из того, что я могу сказать из console.log, однако, когда я нахожусь внутри spec-файла, вызывающего ее, я получаю undefined.

вот моя спецификация и что я делаю:

it('should click into widget from drawer and verify URL has correct Id', async () => {
    const actualReportId = await pagePbject.getSingleIdFromDrawerUsing('test1', 'test2');
    console.log(actualReportId);
    await pagePbject.clickIntoIdFromDrawer('test1', 'test2');
    expect(await browser.getCurrentUrl()).toBe(pagePbject.routeUrl + actualReportId);
});

вот мой вывод из спецификации:

spits out correct Id from console.log inside the pageObject class
undefined (this is from the spec)
    × should click into test1 test2 widget from the drawer
      - Expected 'http://localhost:49158/url/id' to be 'http://localhost:49158/url/undefined'.

Я должен что-то делать не так, ноя не могу понять это

1 Ответ

0 голосов
/ 11 декабря 2018

Я не уверен, почему вам даже нужно browser.wait() в вашей функции.Вы просто должны быть в состоянии сделать это:

async getSingleIdFromDrawerUsing(test1, test2) {
    return element(by.xpath('//h3[.="' + test1 + '"]/..' +
        '//something//div[@attr1"' + test2 + '"]')).getAttribute('attr2');
}

Если это не сработает, вы можете просто разрешить нативное обещание:

getSingleIdFromDrawerUsing(test1, test2) {
    return new Promise(resolve => {
        element(by.xpath('//h3[.="' + test1 + '"]/..' +
            '//something//div[@attr1"' + test2 + '"]')).getAttribute('attr2')
            .then(value => {
                resolve(value);
            }
    }
}

Вы бы назвали его одинаково в обоихпримеры:

const actualReportId = await pageObject.getSingleIdFromDrawerUsing('test1', 'test2');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...