#selenium #selenium-chromedriver #webdriver-io
#селен #selenium-chromedriver #webdriver-io
Вопрос:
Я сделал небольшие демонстрационные проекты с WebdriverIO 6, Typescript и cucumber. Я поместил это в конфигурационный файл wdio.CHROME.conf.ts:
import { config } from './wdio.conf';
import { CHROME_ARGS } from './chrome-args';
const seleniumConfig = {
version: '3.141.59',
drivers: { chrome: { version: '87.0.4280.20' } },
};
const browserOptions: WebDriver.ChromeOptions amp; { args: Array<string> } = {
args: [
...CHROME_ARGS,
...(process.argv.includes('--headless') ? ['--headless', '--no-sandbox'] : []),
'--window-size=1920,1080',
],
};
const seleniumOpts = config.services?.find(
(service) => Array.isArray(service) amp;amp; service[0] === 'selenium-standalone'
) as SeleniumStandaloneOptions;
seleniumOpts.args = { ...seleniumConfig };
seleniumOpts.installArgs = { ...seleniumConfig };
console.log(seleniumOpts);
const browserConfig: WebdriverIO.Config = {
...config,
capabilities: [
{
browserName: 'chrome',
'goog:chromeOptions': browserOptions,
},
],
};
exports.config = browserConfig;
И это в wdio.conf.ts:
import * as path from 'path';
import * as appRoot from 'app-root-path';
import { commandsFactory } from './commands-factory';
export const config: WebdriverIO.Config = {
specs: [
'./src/features/**/*.feature',
// './src/features/login.feature',
// './src/features/dashboard.feature'
],
exclude: [
],
maxInstances: 1,
logLevel: 'trace',
bail: 0,
baseUrl: 'http://automationpractice.com',
waitforTimeout: 10000,
connectionRetryTimeout: 90000,
connectionRetryCount: 3,
services: [
[
'selenium-standalone',
{
logs: 'logs',
},
],
],
outputDir: path.join(appRoot.path, '/logs'),
framework: 'cucumber',
reporters: [
'spec',
[
'allure',
{
outputDir: 'allure-results',
disableWebdriverStepsReporting: true,
disableWebdriverScreenshotsReporting: false,
useCucumberStepReporter: true,
},
],
],
cucumberOpts: {
backtrace: false,
failAmbiguousDefinitions: true,
failFast: false,
ignoreUndefinedDefinitions: false,
name: [],
snippets: false,
source: true,
profile: [],
require: [
'./src/step_definitions/*.ts',
],
snippetSyntax: undefined,
strict: true,
tagExpression: 'not @Login',
tagsInTitle: false,
timeout: 60000,
},
before(capabilities, specs) {
const commands = commandsFactory({ waitForTimeout: this.waitforTimeout });
/* eslint-disable */
const chai = require('chai');
global.should = chai.should();
// Sample command
function browserCustomCommandExample(text) {
console.log(text);
}
browser.addCommand('browserCustomCommandExample', browserCustomCommandExample);
Object.keys(commands).forEach((key) => {
browser.addCommand(key, commands[key]);
});
},
afterStep(step, context, { error, result, passed, duration }) {
if (error) {
browser.takeScreenshot();
}
},
};
Но после того, как я это делаю npm install
и пытаюсь запустить тесты npm run test:chrome:headless
, я получаю эту ошибку:
[0-0] Error: Failed to create session.
session not created: This version of ChromeDriver only supports Chrome version 85
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'LAPTOP-QUTK6LBV', ip: '192.168.1.8', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_271'
Driver info: driver.version: unknown
Я попытался обновить версию драйвера в wdio.CHROME.conf.ts до 87, но это не помогло.
Он просто не загружает версию 87 драйвера Chrome, вместо этого он застрял с версией 85.
Когда я смотрю node_modulesselenium-standalone.seleniumchromedriver
, есть только версия 85, и она не загружает версию 87 (85 была предыдущей версией, которая была у меня в файле конфигурации).
На моем компьютере версия браузера Chrome равна 87, и для работы требуется та же версия драйвера Chrome (насколько я понимаю: D)
Я попытался удалить node_modules
и сделать это с нуля, но безуспешно.
Это ссылка на мой репозиторий https://github.com/mareru/webdriverIO-shop-demo
Может кто-нибудь, пожалуйста, помогите 🙂 Спасибо!
Комментарии:
1. Я вижу, вы пытаетесь использовать мой пример из gitlab.com/bar_foo/wdio-cucumber-typescript/-/blob/master /…
2. Не уверен, что пошло не так, может быть, какая-то опечатка при копировании вставки, обязательно используйте последние версии @wdio, удалите модули package lock json и node, переустановите пакеты и повторите попытку
3. @MikeG. Я исправил его немного в другой форме, чем в вашем примере. Вы бы сделали это по-другому? Это работает так.
Ответ №1:
Я заменил эти строки:
const seleniumOpts = config.services?.find(
(service) => Array.isArray(service) amp;amp; service[0] === 'selenium-standalone'
) as SeleniumStandaloneOptions;
seleniumOpts.args = { ...seleniumConfig };
seleniumOpts.installArgs = { ...seleniumConfig };
С этими
config.services = [
[
'selenium-standalone',
{
logs: 'logs',
args: seleniumConfig,
installArgs: seleniumConfig,
},
],
];
И это сработало. Похоже, что предыдущий код плохо генерировал фигурные скобки.
Журналы параметров, аргументы, installArgs должны быть в совместных фигурных скобках, а не в отдельных фигурных скобках.
Он сгенерировал это:
[
'selenium-standalone',
{ logs: 'logs' },
args: { version: '3.141.59', drivers: [Object] },
installArgs: { version: '3.141.59', drivers: [Object] }
]
]
Хотя это должно было быть так
[
[
'selenium-standalone',
{ logs: 'logs', args: [Object], installArgs: [Object] }
]
]