Javascript 尝试使用async/await而不是browser.sleep,但它不起作用
我是一个新的量角器和角度应用程序的自动测试开始。我有一个测试,需要使用多个browser.sleep()来实际等待元素渲染并单击它们。使用browser.sleep()可以正常工作,但当我尝试使用async/await时,测试失败,因为它不等待元素 在使用async/await之前,我确实设置了SELENIUM\u PROMISE\u管理器:false 这一个有效: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.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很高兴这有帮助!请把它标记为正确的,这样其他人也可以从中受益。这个答案很好,比图坦卡蒙好。