Javascript 禁用控制流后的量角器找不到元素

Javascript 禁用控制流后的量角器找不到元素,javascript,typescript,protractor,e2e-testing,angular-e2e,Javascript,Typescript,Protractor,E2e Testing,Angular E2e,我已经禁用了控制流,并开始在e2e测试中传播异步/等待访问 这里出现的问题是 失败:索引超出范围。试图访问索引为0的元素,但只有0个元素与定位器匹配(css选择器,.OneLine) NoSuchElementError:索引超出范围。试图访问索引为0的元素,但只有0个元素与定位器匹配(css选择器,.OneLine) 这是我的测验 it('', async () => { await page.dragElToCell('Text', {x: 1, y: 0}); // further

我已经禁用了控制流,并开始在e2e测试中传播异步/等待访问

这里出现的问题是

失败:索引超出范围。试图访问索引为0的元素,但只有0个元素与定位器匹配(css选择器,.OneLine)

NoSuchElementError:索引超出范围。试图访问索引为0的元素,但只有0个元素与定位器匹配(css选择器,.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
,它收到了正确的数字


此外,我还将sleep设置为10秒,以确保元素可见(为此,我还执行了两次
querySelectorAll
,以重复相同的顺序,并获得我希望检索的元素)。

getDraggableEl
getCell
返回一个
Promise
。因此,您需要在
dragElToCell
中添加
wait
,例如:

异步dragElToCell(名称:string,位置:{x:number,y:number}){ const el=wait this.getDragableel(elName); const cell=wait this.getCell(pos.x,pos.y); 返回browser.actions().dragandrop(el,cell.perform(); }
最终提出了本例中唯一有效的解决方案。从什么时候起,
$
开始回复承诺?它返回一个
ElementFinder
由PhpStorm代码帮助证明的内容