我正在使用Node.js selenium-webdriver
,我有这个恼人的问题。我有这个登录功能,填写一些字段,然后尝试通过触发一个按钮登录到一个网站。我知道登录是否成功的方法是在按钮点击后等待某个元素。我想等待5秒钟,并相应地响应来电者。
问题是wait函数抛出异常并且使用try/catch
并没有帮助(异常没有被捕获并且程序退出)。
这是我的代码:
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
var driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
var timeout = 5000;
function login(username, password, callback) {
driver.get('https://www.example.com/');
driver.switchTo().frame(driver.findElement(By.css("iframe")));
driver.findElement(By.name('userid')).sendKeys(username);
driver.findElement(By.name('password')).sendKeys(password);
driver.findElement(By.id('submit_btn')).click();
driver.wait(until.elementLocated(By.className('indication-that-login-was-successful')), timeout).then(function(elm) {
callback(true);
driver.quit();
});
}
因此,如果登录失败(例如因为密码不正确),元素indication-that-login-was-successful
将永远不会出现(一件好事)。但在这种情况下,我一直在
TimeoutError: Waiting for element to be located By(css selector, .indication-that-login-was-successful) Wait timed out after 5001ms
理想情况下,我可以捕获此异常并使用false回调并退出驱动程序:
try {
driver.wait(until.elementLocated(By.className('indication-that-login-was-successful')), timeout).then(function(elm) {
callback(true);
driver.quit();
});
} catch (ex) {
callback(false);
driver.quit();
}
但是如上所述,用try/catch
块包装它似乎没有帮助,异常永远不会被捕获并且程序存在。
有什么想法吗?
答案 0 :(得分:2)
您可以尝试:
driver.wait(until.elementLocated(By.className('indication-that-login-was-successful')), 5000).then(function(elm) {
callback(true);
driver.quit();
}).catch(function(ex) {
callback(false);
driver.quit();
});