我正在使用Node.js中的Selenium Webdriver运行两个测试。我想先停止测试,然后再运行第二个。但是问题在于driver.close引发异常。
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
var driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
driver.get('https://www.website.com/');
var values = [{email:'correctuser@website.com',password:'correct'},{email:'wronguser@website.com',password:'wrong'}];
testCase(values[0].email,values[0].password);
// driver.close throws exception
driver.close();
testCase(values[1].email,values[1].password);
function testCase(email,password){
driver.wait(until.urlIs('https://www.website.com/'))
driver.findElement(By.id('inputEmail')).clear();
driver.findElement(By.id('inputEmail')).sendKeys(email);
driver.findElement(By.id('inputPassword')).clear();
driver.findElement(By.id('inputPassword')).sendKeys(password);
driver.findElement(By.tagName('button')).click().then(()=>{
driver.wait(until.elementLocated(By.className('alert-danger'))).then(() =>{
console.log('Failed login case - success');
}).catch((e)=>{
console.log(e);
});
driver.wait(until.urlIs('https://www.website.com/home')).then(() => {
console.log('Successful login case - success');
}).catch((e)=>{
console.log(e);
});
});
}
错误消息:
(node:1296) UnhandledPromiseRejectionWarning: NoSuchSessionError: invalid session id
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.13.6 x86_64)
预期结果应为:
- Successful login case - success
- Failed login case - success
答案 0 :(得分:0)
请勿使用driver.close()
,而应使用driver.quit()
。
driver.close()
将关闭现有的Selenium窗口,如果没有窗口,它将出错。它确实是设计用于在打开多个不同的浏览器窗口时使用的。
driver.quit()
是硒中的清理命令。它将关闭所有现有窗口,然后取消引用驱动程序对象。如果当前没有打开的窗口,则不会出错。
话虽这么说,不是导致驱动程序关闭导致您出现问题,而是事实是您运行的第二个测试用例(第testCase(values[1].email,values[1].password);
行)假设您具有浏览器对象。不是因为您关闭了上一行的最后一个窗口,这导致浏览器对象被垃圾邮件阻塞。
要消除此错误,您需要致电
var driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
再次致电
testCase(values[1].email,values[1].password);
*编辑*
因此,为您提供完整的代码块:
var values = [{email:'correctuser@website.com',password:'correct'},{email:'wronguser@website.com',password:'wrong'}];
var driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
driver.get('https://www.website.com/');
testCase(values[0].email,values[0].password);
driver.quit();
driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
driver.get('https://www.website.com/');
testCase(values[1].email,values[1].password);