如何使用Webdriver(JavaScript)停止Selenium中的测试?

时间:2019-05-15 05:30:23

标签: javascript selenium testing selenium-webdriver webdriver

我正在使用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

1 个答案:

答案 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);