量角器。如何在测试之间重新启动浏览器?

时间:2021-02-07 00:04:32

标签: protractor

我编写了一组测试,并且每个测试都可以正常工作(对于每个测试,我创建了单独的文件 - 这对我的情况很重要),但是当我尝试将它们一起运行时,我遇到了一些问题: 起初,我尝试在每次测试后使用 “restartBrowserBetweenTests: true” 选项重新启动浏览器,但结果我收到下一个错误:

<块引用>

失败:此驱动程序实例没有有效的会话 ID(您是否 调用 WebDriver.quit()?) 并且可能不再使用。

我阅读了一些针对这种情况的建议,但没有任何帮助。

基本上,我可以在不重新启动浏览器的情况下获得,但在这种情况下,我想在每次测试后关闭所有活动选项卡,但我也不知道该怎么做。借助此功能:

browser.getAllWindowHandles().then((handles) => {
    browser.driver.switchTo().window(handles[1]);
    browser.driver.close();
    browser.driver.switchTo().window(handles[0]);
});

我可以关闭活动选项卡并返回上一个选项卡,但该功能仅在我将此代码放入测试规范中时才起作用,这对我来说很不舒服(为每个测试复制它)并且如果我从带有函数的特殊文件中调用它由于

,它无法正常工作 <块引用>

“失败:没有这样的窗口:目标窗口已经关闭 来自未知错误:未找到网络视图”

错误(丢失上下文的结果)。

1 个答案:

答案 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();

  });

这是因为元素的引用发生了变化,您必须重新初始化它们

相关问题