我在 nodejs 中使用 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
最佳答案
不要使用driver.close()
,使用driver.quit()
。
driver.close()
将关闭现有的 Selenium 窗口,如果没有窗口则会出错。它实际上是为在打开多个不同的浏览器窗口时使用而设计的。
driver.quit()
是 selenium 中的清理命令。它将关闭所有现有窗口,然后取消引用驱动程序对象。如果当前没有打开的窗口,则不会出错。
话虽如此,导致问题的不是驱动程序关闭,而是您运行的第二个测试用例(行 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);
关于javascript - 如何使用 webdriver (JavaScript) 在 selenium 中停止测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56142306/