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