我在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'.
我必须做错了事,但我无法弄清楚
答案 0 :(得分:0)
我不确定您为什么在功能中甚至需要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');