#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 пожалуйста, примите и озвучьте ответ, нажав на значок «Вверх» и значок «Принять».