使用 Selenium 等待 JavaScript 事件

Waiting for JavaScript event with Selenium

我正在 Selenium (Node.js) 之上构建一个由多个步骤组成的自动化框架。 每一步都在前一步之后,完成后返回一个承诺(就像 Selenium 的 driver.click() 等返回的承诺)。 是否可以等待 JavaScript 事件在浏览器上触发?如果是这样,遵循的模式是什么?

使用.executeAsyncScript等待事件发生:

driver.executeAsyncScript(function(callback) {
  window.addEventListener('message', function onmessage() {
    window.removeEventListener('message', onmessage);
    callback();
  });
});

文档:

http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/webdriver_exports_WebDriver.html#executeAsyncScript