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