我已经禁用了控制流并开始在我的 e2e 测试中传播 async/await。
问题就出现了
失败:索引超出范围。尝试访问索引处的元素:0,但只有 0 个元素匹配定位器 By(css selector, .OneLine)
NoSuchElementError:索引超出范围。尝试访问索引处的元素:0,但只有 0 个元素匹配定位器 By(css selector, .OneLine)
这是我的测试
it('', async () => {
await page.dragElToCell('Text', {x: 1, y: 0});
// further some expectations that are not reached due to error thrown which points to page.dragElToCell
})
这是一个页面 obj 方法
async dragElToCell(name: string, pos: {x: number, y: number}) {
const el = this.getDraggableEl(elName);
const cell = this.getCell(pos.x, pos.y);
return browser.actions().dragAndDrop(el, cell).perform();
}
getDraggableEl(name: string) {
return element(by.cssContainingText('.draggable', name);
}
getCell(x: number, y: number) {
return $$('.OneLine').get(y).$$('.Column').get(x);
}
这段代码在控制流中运行良好。一旦我禁用它,它就停止工作。
诀窍是,如果我执行
expect(await $$('.OneLine').get(0).$$('.Column').get(1).isPresent()).toBeTruthy();
在我的测试套件中,它工作正常并给了我true
.
我也调试过getCell
,它收到了正确的数字。
此外,我设置了 10 秒的睡眠时间以确保元素可见(为此还执行querySelectorAll
了两次以重复相同的序列并获得我希望检索的元素)。