nodejs硒如何在输入新值之前避免driver.sleep

时间:2018-12-04 11:36:04

标签: selenium selenium-webdriver selenium-chromedriver

我正在通过避免使用driver.sleep来避免在测试代码中引入不确定性(如本博客所述:https://medium.freecodecamp.org/how-to-write-reliable-browser-tests-using-selenium-and-node-js-c3fdafdca2a9)。

使用测试运行程序,我在登录表单上重复运行一个测试用例,大约重复10次(不调用driver.quit()),如下所示:

async function doLogin(driver, testcase) {

  try {
    let username = testcase.input.username;
    let password = testcase.input.password;

    let loginInput = await driver.wait(until.elementLocated(By.id('loginId')),2000);
    loginInput = await driver.wait(until.elementIsVisible(loginInput), 20000);
    await loginInput.clear();
    await driver.sleep(1000);
    logger.info("Entering username:%s", username);
    await loginInput.sendKeys(username);

    logger.info("Entering password:%s", password);
    let passwdInput = await driver.wait(until.elementLocated(By.id('password')),2000);
    passwdInput = await driver.wait(until.elementIsVisible(passwdInput), 20000);
    await passwdInput.clear();
    await driver.sleep(1000);
    await passwdInput.sendKeys(password, Key.RETURN) ;
  } catch(e) {
    logger.error("Error in doLogin:%s", e.toString());
  }
}

呼叫代码...

testLogin: async function(testcase) {
    try {
      logger.info("Loading page: %s...", URL);
      await driver.get(URL);
      await doLogin(driver, testcase);

上面的代码试图清除输入/密码字段,输入新数据,然后单击登录按钮。尽管我一直在等到找到元素并看到元素为止,但似乎无法可靠地清除输入字段并输入数据。结果,由于用户名和密码不正确,我发现随机测试(大约50%)失败。

driver.sleep()之后添加element.clear()可以解决不一致的问题。因此,我仍然必须依靠driver.sleep()

是否有一种可靠的方式来实现自动化而无需依靠driver.sleep()

PS:我正在将Chrome驱动程序与Selenium Webdriver 4.0.0-alpha.1配合使用

1 个答案:

答案 0 :(得分:0)

您正在异步运行测试。这意味着所有10个测试用例都在争夺对输入字段的控制。尝试删除“异步”并依次运行10个测试用例。