我编写了一组测试,并且每个测试都可以正常工作(对于每个测试,我创建了单独的文件 - 这对我的情况很重要),但是当我尝试将它们一起运行时,我遇到了一些问题:
起初,我尝试在每次测试后使用 “restartBrowserBetweenTests: true”
选项重新启动浏览器,但结果我收到下一个错误:
失败:此驱动程序实例没有有效的会话 ID(您是否 调用 WebDriver.quit()?) 并且可能不再使用。
我阅读了一些针对这种情况的建议,但没有任何帮助。
基本上,我可以在不重新启动浏览器的情况下获得,但在这种情况下,我想在每次测试后关闭所有活动选项卡,但我也不知道该怎么做。借助此功能:
browser.getAllWindowHandles().then((handles) => {
browser.driver.switchTo().window(handles[1]);
browser.driver.close();
browser.driver.switchTo().window(handles[0]);
});
我可以关闭活动选项卡并返回上一个选项卡,但该功能仅在我将此代码放入测试规范中时才起作用,这对我来说很不舒服(为每个测试复制它)并且如果我从带有函数的特殊文件中调用它由于
,它无法正常工作 <块引用>“失败:没有这样的窗口:目标窗口已经关闭 来自未知错误:未找到网络视图”
错误(丢失上下文的结果)。
答案 0 :(得分:0)
https://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.restart
改为使用:
browser.restart()
也尝试使用 await
it('Test Puppeteer screenshot', async function() {
await browser.get('https://www.google.com')
let current = await browser.getWindowHandle()
await browser.executeScript("window.open('https://www.indiatoday.com')")
handles = await browser.getAllWindowHandles()
await browser.switchTo().window(handles[1]);
await browser.close();
await browser.switchTo().window(handles[0]);
});
请注意,如果您使用的是页面对象,则必须重新初始化模块:
如果您正在为页面使用 javascript 对象表示法,则
https://www.npmjs.com/package/decache
const decache = require('decache');
let stage1 = require('../pageobjects/stage1.js');
beforeEach(async function () {
decache('../pageobjects/stage1.js');
stage1 = require('../pageobjects/stage1.js');
elements = stage1.elements;
});
如果您使用的是 nodejs 类:
let stage1 = require('../pageobjects/stage1.js');
beforeEach(async function () {
stage1 = new PageObjects.stage1();
});
这是因为元素的引用发生了变化,您必须重新初始化它们