Как я могу создать новый сеанс браузера и удалить его на webdriverio?

#webdriver-io #cucumberjs

Вопрос:

Я использую реализацию webdriverio с cucumberjs.

Я хотел бы, чтобы каждый сценарий, который я запускаю, создавал новый браузер и удалял его после завершения сценария.

Я думал, что этого можно достичь с помощью огуречных крючков

  beforeScenario: async function (world) {
   await browser.newSession(capabilities)
}

afterScenario: async function (world) {
       await browser.deleteSession()
    }
 

Однако это не работает, использование функции reloadSession() после сценариев не является идеальным, поскольку она перезагружает браузер после запуска отдельных сценариев, в чем нет необходимости.

Я заметил, что тестовый запуск создает новый объект браузера каждый раз при запуске, есть ли способ пропустить это и создать его на уровне BeforeScenario?

Ответ №1:

Вы можете справиться с этим, создав другой класс, например «DriverFactory», который принимает имя браузера в качестве параметра конструктора. На основе этого параметра запустите соответствующий браузер и верните его. В другом классе создайте статическую переменную, такую как драйвер общественного статуса. Назначьте объект драйвера, возвращенный выше класса, этой переменной в вашем крючке BeforeScenario, если ее значение не определено, например:

     beforeScenario: async function (world) {
      if (driver === 'undefined') {
          driver = DriverFactory.launchBrowser("browsername");

}
    }
 

в этом случае в каждом сценарии этот блок будет выполняться и проверяет, не определена ли переменная. Если да, он создает/ запускает новый экземпляр браузера, иначе он этого не сделает..

Комментарии:

1. Большое вам спасибо за помощь, я попробовал пойти этим путем, и это помогло

Ответ №2:

 afterScenario: async function (world, result) {

    const client = await browser.newSession(browser.capabilities);   
    const clientNew = Object.create(browser)
    await clientNew.deleteSession()
    browser.sessionId = client.sessionId
    
},
 

попробуйте это , но await browser.reloadSession() делает то же самое , я не уверен, что вы подразумеваете под этим, что это не работает

Комментарии:

1. Спасибо за ответ, это было действительно полезно

2. @AgustinPequeno пожалуйста, примите и озвучьте ответ, нажав на значок «Вверх» и значок «Принять».