javascript - 如何使用 webdriver (JavaScript) 在 selenium 中停止测试?

标签 javascript selenium testing selenium-webdriver webdriver

我在 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/

相关文章:

reactjs - TypeError : wrapper. 存在不是函数 && TypeError : wrapper. find 不是函数

javascript - Ember 辛烷 : Unit testing async action on controller

testing - 您如何为简单的用户代理查找编写 salesforce 测试类?

javascript - AngularJS:一次显示数组中的一个特定对象

javascript - PHP防止 "javascript:"链接注入(inject)

javaScript 将字符串数组转换为数组

Selenium Click 有时无法使用 Edge 驱动程序工作

javascript - 访问嵌套指令内的父范围变量

c# - Selenium C# : Not able to click on an element within #shadow-root (closed) which appears when user mouse over

java - 如何使用 css 选择器提取属性值?