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

Protractor. How to restart browser between tests?

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

Failed: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.

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

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

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

我可以关闭活动选项卡,return 关闭前一个选项卡,但只有当我将这段代码放在测试规范中时该功能才有效,这对我来说不舒服(为每个测试复制它)并且如果我调用它来自具有功能的特殊文件,由于

而无法正常工作

“Failed: no such window: target window already closed from unknown error: web view not found”

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

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 class:

let stage1 = require('../pageobjects/stage1.js');

beforeEach(async function () {
    stage1 = new PageObjects.stage1();

  });

这是因为元素的引用已更改,您必须重新初始化它们