如何让Selenium WebdriverJS代码按顺序执行

How to make Selenium WebdriverJS code execute in sequence

我对使用 WebDriverJS 和尝试一个简单的脚本开始比较陌生。 但是,我遇到了很多问题,没有找到任何有用的资源。

正在测试的场景:

  1. 启动浏览器
  2. 导航到 google.com
  3. 捕获页面标题
  4. 添加等待语句(driver.sleep)
  5. 在搜索框中输入一些文本

这是代码片段

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;

var driver = new webdriver.Builder().forBrowser('chrome').build();
driver.get("http://www.google.com");
driver.getTitle().then(function(title) {
    console.log("Title is: " + title);
});
console.log('Before sleep');
driver.sleep(10000);
console.log('After sleep');
driver.findElement(By.name('q')).sendKeys("Hello");

这是输出:

Before sleep
After sleep

DevTools listening on ws://127.0.0.1:52449/devtools/browser/aea4d9eb-20ee-4f10-b53f-c2003c751796
Title is: 

可以看出,这是一个非常简单的场景。然而 none 的它正在按预期工作。

以下是我的查询/观察

  1. console.log for Before/After sleep 甚至在浏览器启动之前作为第一条语句执行,但意图并不明确。
  2. 标题返回一个空字符串。没有打印值。
  3. driver.sleep() 从未等待指定的持续时间。所有命令立即执行。当 driver.sleep 不工作时如何让 driver 硬等待?
  4. 尝试添加隐式等待,但这也导致了错误。
  5. 应遵循哪些最佳做法?

没有找到很多有用的网络driver javascript资源,但不清楚如何进行。

任何指导表示赞赏。 TIA.!

我也参考了文档,那里给出了类似的步骤。不确定我这边是否有问题。 https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs

假设您的示例是用 JavaScript 编写的并在 Node.js 上运行,看起来您会错过所有等待异步函数完成处理的时间。请注意,大多数函数 return 是一个承诺,您必须等待承诺得到解决。

考虑以下示例代码:

const {Builder, By, Key, until} = require('selenium-webdriver');

(async function example() {
  let driver = await new Builder().forBrowser('firefox').build();
  try {
    await driver.get('http://www.google.com/ncr');
    await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
    await driver.wait(until.titleIs('webdriver - Google Search'), 1000);
  } finally {
    await driver.quit();
  }
})();