Я изучаю тестирование пользовательского интерфейса с помощью 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'))
})
});
Где я ошибся?
Привет Верром, Просто интересно, это для webdriver.io
или для seleniumWebdriver.js
. Насколько я понимаю, класс by
не используется в webdriver.io
. Просто чтобы убедиться, что ваш вопрос опубликован с правильными тегами.
@corschdi Я не пробовал. Большое спасибо, помогло! Не могли бы вы создать ответ на вопрос?
Поскольку findElement
и sendKeys
также возвращают промисы, вам также придется ждать методов:
await driver.findElement(by.name('q')).then(element => element.sendKeys('test'));
Функция then
добавляет в цепочку еще одно обещание. Поскольку исходная тестовая функция является асинхронной и должна ждать завершения функции then
, здесь требуется await
.
Ваш тест закончился до того, как код действительно запустится, вам следует дождаться каждого асинхронного оператора.
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');
})
});
просто быстрый вопрос, вы пробовали использовать
await driver.findElement(by.name('q')).then(element => element.sendKeys('test'));