Javascript selenium webdriver node.js:如何在等待超时后处理缺少的元素(异常似乎不会被捕获)
我正在使用Node.jsJavascript selenium webdriver node.js:如何在等待超时后处理缺少的元素(异常似乎不会被捕获),javascript,node.js,selenium,selenium-webdriver,Javascript,Node.js,Selenium,Selenium Webdriver,我正在使用Node.jsSeleniumWebDriver,我遇到了这个恼人的问题。我有这个登录功能,它填写一些字段,然后通过点击按钮尝试登录到网站。我知道登录是否成功的方法是在单击按钮后等待某个元素。我想等5秒钟,然后相应地回复来电者 问题是wait函数抛出异常,并使用try/catch绕过它,但这没有帮助(异常未被捕获,程序退出) 这是我的代码: var webdriver = require('selenium-webdriver'), By = webdriver.By, unt
SeleniumWebDriver
,我遇到了这个恼人的问题。我有这个登录功能,它填写一些字段,然后通过点击按钮尝试登录到网站。我知道登录是否成功的方法是在单击按钮后等待某个元素。我想等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();
});
}
因此,如果登录不成功(例如,因为密码不正确),则表示登录成功的元素将永远不会出现(一件好事)。但在这种情况下,我总是
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
块来结束这个过程似乎没有什么帮助,异常永远不会被捕获,程序也存在
有什么想法吗 您可以尝试:
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();
});
嗨,林,谢谢。你的答案很好(它帮助我指出了正确的方向)。如果elementLocated函数返回promise对象,我就使用了catch函数。您可以编辑您的答案来使用它吗(这与我的问题更相关,因为我使用的是promise API)。感谢driver.wait(直到.elementLocated(By.className('indication-that-login-was-successful')),5000)。然后(函数(elm){callback(true);driver.quit();})。catch(函数(ex){callback(false);driver.quit();});我很高兴它能帮助你。我会根据你的建议更新答案