当前位置: 首页 > 知识库问答 >
问题:

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

岳嘉良
2023-03-14

我尽量避免在我的测试代码中引入不确定性,避免使用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%)由于用户名和密码不正确而失败。

通过添加驱动程序,可以克服这种不一致性。sleep(),位于元素之后。清除()。所以,我仍然需要依赖驱动程序。sleep()

是否有可靠的方法实现自动化,而无需借助驱动程序。sleep()

PS:我用的是chrome驱动程序和硒WebDrive 4.0.0-alpha.1

共有1个答案

子车修平
2023-03-14

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

 类似资料:
  • 如何避免在HTML5中输入数字的十进制值。目前,它允许用户键入十进制值。

  • 本文向大家介绍避免在MongoDB中重复输入?,包括了避免在MongoDB中重复输入?的使用技巧和注意事项,需要的朋友参考一下 为了避免在MongoDB中重复输入,可以使用。语法如下- 让我们实现以上语法。避免在MongoDB中重复条目的查询如下- 现在在上面的集合中插入一些记录。插入记录的查询如下- 每当您尝试再次插入相同记录时,都会出现此错误- 让我们插入另一条记录。查询如下- 在method

  • 问题内容: 我是mongodb的新手。我可以知道如何避免重复输入。在关系表中,我们使用主键来避免它。我可以知道如何使用Java在Mongodb中指定它吗? 问题答案: 在选项中使用索引。 您也可以跨多个字段执行此操作。 有关 更多详细信息和示例, 请参阅 文档中的 此部分 。 MongoDB索引可以有选择地施加一个 唯一的键约束 ,以确保不会插入任何索引键值与现有文档值匹配的文档。 如果希望从唯一

  • 我正在尝试自动化电子邮件注册。当我手动操作时,它会工作,但当我用selenium打开网站时,它不会工作。它有我不能做的验证。有没有一种方法可以在不被检测的情况下打开(而不是控制,我使用pyautogui)一个网站? 我的代码:

  • 我有一个简单的项目,该项目将个人信息提供给数据库(sqlite),现在我想避免插入重复值(按名称),我不能做什么?谢谢你们

  • 问题内容: 我遇到一种情况(在硒测试期间),在这种情况下,用户将收到安全代码。然后,用户必须先输入安全密码,然后才能继续操作。 我不太确定如何获得用户输入的值。我浏览了硒文档,并提出了这个建议。不幸的是,它并不是很有效。 有人可以指出我正确的方向吗? 问题答案: 似乎您必须先接受并关闭提示,然后才能存储和使用该值