Как остановить тесты в селене с помощью веб-драйвера (JavaScript)? - PullRequest
0 голосов
/ 15 мая 2019

Я запускаю два теста с использованием селенового веб-драйвера в nodejs. Я хочу остановить первый тест, а затем запустить второй. Но проблема в том, что 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 голосов
/ 15 мая 2019

Не используйте 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);

* EDIT *

Итак, чтобы дать вам полный блок кода:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...