WebdriverIO - отклонение необработанного обещания: NoSuchSessionError: недопустимый идентификатор сеанса

Я изучаю тестирование пользовательского интерфейса с помощью Jasmine & WebdriverIO. Я использую его с NodeJS. У меня есть следующий тестовый код:

const projectsPage = require('../../lib/pages/projects.page');
const by = require('selenium-webdriver').By;

describe('Projects page', () => {
  it('Search google', async() => {
    await projectsPage.navigateTo();
    driver.getTitle().then(function(title) {
      expect(title).toBe('Google');
    });
    driver.findElement(by.name('q')).sendKeys('test');
  })
});

Когда я запускаю его, я получаю сообщение об ошибке:

Unhandled promise rejection: NoSuchSessionError: invalid session id
      (Driver info: chromedriver=2.46.628411 (3324f4c8be9ff2f70a05a30ebc72ffb013e1a71e),platform=Mac OS X 10.14.5 x86_64)

Но приведенный ниже код работает успешно:

describe('Projects page', () => {
  it('Search google', async() => {
    await projectsPage.navigateTo();
    driver.getTitle().then(function(title) {
      expect(title).toBe('Google');
    });
    driver.findElement(by.name('q'))
  })
});

Где я ошибся?

просто быстрый вопрос, вы пробовали использовать await driver.findElement(by.name('q')).then(element => element.sendKeys('test'));

corschdi 27.05.2019 18:45

Привет Верром, Просто интересно, это для webdriver.io или для seleniumWebdriver.js. Насколько я понимаю, класс by не используется в webdriver.io. Просто чтобы убедиться, что ваш вопрос опубликован с правильными тегами.

Naveen Thiyagarajan 28.05.2019 13:57

@corschdi Я не пробовал. Большое спасибо, помогло! Не могли бы вы создать ответ на вопрос?

verrom 28.05.2019 15:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
2 194
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку findElement и sendKeys также возвращают промисы, вам также придется ждать методов:

await driver.findElement(by.name('q')).then(element => element.sendKeys('test'));

Функция then добавляет в цепочку еще одно обещание. Поскольку исходная тестовая функция является асинхронной и должна ждать завершения функции then, здесь требуется await.

corschdi 28.05.2019 16:14

Ваш тест закончился до того, как код действительно запустится, вам следует дождаться каждого асинхронного оператора.

const projectsPage = require('../../lib/pages/projects.page');
const by = require('selenium-webdriver').By;

describe('Projects page', () => {
  it('Search google', async() => {
    await projectsPage.navigateTo();
    const title = await driver.getTitle();
    expect(title).toBe('Google');
    const q = await driver.findElement(by.name('q'));
    await q.sendKeys('test');
  })
});

Другие вопросы по теме