Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用async/await而不是browser.sleep,但它不起作用_Javascript_Angular_Testing_Async Await_Protractor - Fatal编程技术网

Javascript 尝试使用async/await而不是browser.sleep,但它不起作用

Javascript 尝试使用async/await而不是browser.sleep,但它不起作用,javascript,angular,testing,async-await,protractor,Javascript,Angular,Testing,Async Await,Protractor,我是一个新的量角器和角度应用程序的自动测试开始。我有一个测试,需要使用多个browser.sleep()来实际等待元素渲染并单击它们。使用browser.sleep()可以正常工作,但当我尝试使用async/await时,测试失败,因为它不等待元素 在使用async/await之前,我确实设置了SELENIUM\u PROMISE\u管理器:false 这一个有效: browser.get(http://localhost); browser.sleep(1000); element(by.cs

我是一个新的量角器和角度应用程序的自动测试开始。我有一个测试,需要使用多个browser.sleep()来实际等待元素渲染并单击它们。使用browser.sleep()可以正常工作,但当我尝试使用async/await时,测试失败,因为它不等待元素

在使用async/await之前,我确实设置了SELENIUM\u PROMISE\u管理器:false

这一个有效:

browser.get(http://localhost);
browser.sleep(1000);
element(by.cssContainingText('.title1, 'text1')).click();
browser.sleep(1000);
element(by.cssContainingText('.title2', 'text2')).click();
这一个不起作用,并表示找不到第二个元素:

it('should navigate to screen', async function() {
    browser.get(http://localhost);
    browser.wait(function () {
      return element(by.css('.top-navigation')).isPresent();
    }, 5000);
    await element(by.cssContainingText('.title1', 'text1')).click();
    await element(by.cssContainingText('.title2', 'text2')).click();
  });

等待!=等待

wait用于对承诺链元素进行排队以增加同步性。在您的情况下,您应该在尝试与元素交互之前添加等待。最简单的方法是创建一个等待元素的函数,然后传递所需的任何元素,如下所示:

声明预期条件:

const EC = protractor.ExpectedConditions; 
编写单击功能:

const clickElement = async function (element) {
    await browser.wait(EC.elementToBeClickable(element));
    await element.click();
};
然后使用它:

it('should navigate to screen', async function() {
    await browser.get(http://localhost);
    await clickElement(element(by.cssContainingText('.title1', 'text1')));
    await clickElement(element(by.cssContainingText('.title2', 'text2')));
});

我对量角器了解不多,但这个
元素(…)。click()
返回承诺吗?否则,
await
操作员将不会做太多。。它只能等待承诺。在
浏览器之前添加
wait
。获取(…)
浏览器。等待(…)
。不幸的是,在
浏览器之前添加
wait
。获取(…)
浏览器。等待(…)
没有帮助,元素找不到…但具有预期条件的解决方案似乎正在运行,你仍然需要等待浏览器。等等。这是一个很好的答案@radoja很高兴这有帮助!请把它标记为正确的,这样其他人也可以从中受益。这个答案很好,比图坦卡蒙好。