Angular TypeScript PrograntRor end-2-end测试-无需在代码中调用browser.sleep()

Angular TypeScript PrograntRor end-2-end测试-无需在代码中调用browser.sleep(),angular,typescript,ecmascript-6,protractor,automated-tests,Angular,Typescript,Ecmascript 6,Protractor,Automated Tests,我正在用打字机脚本在界面上书写。我们使用量角器进行端2端测试。我们的问题是,我们的屏幕上有很多折叠/展开的部分,或者当点击按钮时显示和关闭的模态 我们必须在点击后添加一个浏览器。sleep(500),以便在下一部分测试运行之前打开它们 这是最好的方法吗?还是我们应该在窗口/分区打开/关闭时添加一个回调,并且只有在调用时才继续 if('the confirmation modal opens, I can accept', () => { element(by.id('openPopUp

我正在用打字机脚本在界面上书写。我们使用量角器进行端2端测试。我们的问题是,我们的屏幕上有很多折叠/展开的部分,或者当点击按钮时显示和关闭的模态

我们必须在点击后添加一个
浏览器。sleep(500)
,以便在下一部分测试运行之前打开它们

这是最好的方法吗?还是我们应该在窗口/分区打开/关闭时添加一个回调,并且只有在调用时才继续

if('the confirmation modal opens, I can accept', () => {
  element(by.id('openPopUpButton')).click();
  browser.sleep(500);
  expect(element(by.id('confirmationTextString')).isPresent()).toBeTruthy();
});
我不太愿意添加专门用于使测试能够正确运行的代码。 我更希望我们能以某种方式依赖async/wait或Promissions,但这是可能的吗?

browser.wait()
是一种更细致的睡眠版本。使用可以使代码等待到所需的条件。例如(使用您的代码)

如果元素需要1秒才能出现,它将只等待1秒,但是如果您使用的是慢速浏览器,加载需要10秒,那么代码将等待10秒

let EC = protractor.ExpectedConditions;
element(by.id('openPopUpButton')).click();
let confirm = element(by.id('confirmationTextString'));
browser.wait(EC.presenceOf(confirm),15000); //Timeout of 15 seconds
expect(confirm.getText()).toBe('Random Text') //Checked for text since wait basically checks for isPresent