如何在 webdriverio 上创建新的浏览器会话并将其删除?

How can I create a new browser session and delete it on webdriverio?

我正在使用带有 cucumberjs 的 webdriverio 实现。

我希望我 运行 的每个场景都创建一个新的浏览器,并在场景完成后删除它 运行ning。

我认为这可以通过使用黄瓜钩来实现

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

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

但是,这不起作用,在场景之后使用 reloadSession() 并不理想,因为它会在 运行 个别场景之后重新加载浏览器,这是不必要的。

我注意到测试 运行ner 每次都会创建一个新的浏览器对象 运行,我有什么办法可以跳过它并在 beforeScenario 级别创建它?

您可以通过创建另一个 class 来处理此问题,例如 'DriverFactory',它将浏览器名称作为构造函数参数。基于此参数,启动相应的浏览器并 return 它。 在另一个 class 中,创建一个静态变量,如 public 状态驱动程序。在您的 beforeScenario 挂钩中将上述 class returned 驱动程序对象分配给此变量,以防其值未定义,例如:

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

}
    }

在这种情况下,在每种情况下都会执行此块并检查变量是否未定义。如果是,它会创建/启动一个新的浏览器实例,否则它不会..

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() 做同样的事情,我不确定你的意思是它不起作用