Webdriverio selenium standalone не обновляет версию драйвера

#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] }
  ]
]