在规范内部时从.getAttribute返回值



我在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中可以看出,这个函数非常有效,但当我在规范文件中调用它时,我会得到未定义的结果。

这是我的规格和我正在做的事情:

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'.

我一定做错了什么,但我搞不清楚

我不知道为什么在函数中需要browser.wait()。你应该能够做到这一点:

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

如果这不起作用,你可以直接解决本地Promise:

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');

最新更新