代码之家  ›  专栏  ›  技术社区  ›  Mopparthy Ravindranath

nodejs硒如何避免司机。睡觉输入新值之前

  •  0
  • Mopparthy Ravindranath  · 技术社区  · 6 年前

    我试图避免在我的测试代码中引入不确定性,避免使用司机。睡觉(如本博客所示: 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);
    

    上面的代码试图清除输入/密码字段,输入新数据并单击登录按钮。尽管我已经注意到要等到找到element,直到element可见,但似乎我无法可靠地清除输入字段并输入数据。结果,我发现随机测试(大约50%)由于用户名和密码错误而失败。

    通过添加一个 driver.sleep() ,在 element.clear() . 所以,我还是要依靠 司机。睡觉() .

    有没有一种可靠的方法来实现自动化,而不必求助于 司机。睡觉() ?

    PS:我正在使用带有selenium webdriver 4.0.0-alpha.1的chrome驱动程序

    1 回复  |  直到 6 年前
        1
  •  1
  •   Marie    6 年前

    您正在异步运行测试。这意味着所有10个测试用例都在为控制您的输入字段而斗争。尝试删除“async”并按顺序运行10个测试用例。