Внимательно посмотрите в документации
Возвращает то, что было сказано, чтобы вернуть.
Возвращает Promise<string>
значение атрибута.
Связь между codecept js и браузером асинхронна. Codecept js ищет синхронизацию действий, отправляемых в браузер. Но он не может найти ответ браузера, поэтому вы должны вручную указать для codecept js ждать результата.
В Codecept JS такая реализация выполняется с помощью Promises
Чтобы получить значение от Promise, вы должны дождаться его let userid_xpath = await I.grabAttributeFrom(someSelector);
Но ожидание Promise закончится выполнением из-за внутренней реализации Codecept js. Итак, как сказано в docs :
Возобновляет выполнение теста, поэтому его следует использовать внутри async
с оператором await
.
mark Вы тестируете функцию как async
:
Scenario("should log viewability point, when time and percent are reached", async (I) => {
I.amOnPage(testPage);
const userid_xpath = await I.grabAttributeFrom("//div[@class='mat-form-field-infix']/input[contains(@id,'mat-input')]","id");
const userid = "//*[@id='" + userid_xpath + "']";
I.fillField(userid, "username")
});