我正在通过避免使用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配合使用
答案 0 :(得分:0)
您正在异步运行测试。这意味着所有10个测试用例都在争夺对输入字段的控制。尝试删除“异步”并依次运行10个测试用例。