Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打开新选项卡后,如何切换到Puppeter浏览器实例中的上一个选项卡? 问题_Javascript_Angularjs_Jestjs_Chromium_Puppeteer - Fatal编程技术网

Javascript 打开新选项卡后,如何切换到Puppeter浏览器实例中的上一个选项卡? 问题

Javascript 打开新选项卡后,如何切换到Puppeter浏览器实例中的上一个选项卡? 问题,javascript,angularjs,jestjs,chromium,puppeteer,Javascript,Angularjs,Jestjs,Chromium,Puppeteer,我正在编写几个测试套件,使用Jest和Puppeter自动测试AngularJS应用程序的主页。我编写的其中一个测试自动单击按钮,在新选项卡中打开另一个网站。不幸的是,我找不到一种方法来强迫木偶演员在新标签产生后返回到以前的标签,即我的应用程序的主页。换句话说,由于一个我还没有发现的原因,木偶演员似乎被卡在了新的账单上。对我来说,能够切换回上一个选项卡非常重要,这样我的应用程序主页上的所有后续测试都可以继续并通过。所以我想知道在Puppeter中是否存在一种切换选项卡的方法,或者至少关闭一个选项

我正在编写几个测试套件,使用Jest和Puppeter自动测试AngularJS应用程序的主页。我编写的其中一个测试自动单击按钮,在新选项卡中打开另一个网站。不幸的是,我找不到一种方法来强迫木偶演员在新标签产生后返回到以前的标签,即我的应用程序的主页。换句话说,由于一个我还没有发现的原因,木偶演员似乎被卡在了新的账单上。对我来说,能够切换回上一个选项卡非常重要,这样我的应用程序主页上的所有后续测试都可以继续并通过。所以我想知道在Puppeter中是否存在一种切换选项卡的方法,或者至少关闭一个选项卡以便自动返回上一个选项卡

我的测试环境概述: 木偶演员版本:1.19.0 Jest版本:24.8.0 AngularJS版本:1.7.8 Node.js版本:12.7.0 平台/操作系统版本:macOS Mojave 10.14.6 破译的代码 免责声明:为了向这个社区提供一个更简单的示例,我选择不复制和粘贴我的原始代码。因此,对于以下代码中的任何输入错误,我深表歉意。我很警惕,但我是人,所以我会犯错误

当前测试行为: 尝试1结果:Jest抛出以下错误,所有后续测试失败

TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'BrowserContext'
    |     property '_browser' -> object with constructor 'Browser'
    --- property '_defaultContext' closes the circle Are you passing a nested JSHandle?
    at JSON.stringify (<anonymous>)

  635 | 
  636 |     let tabs = await global.__BROWSER__.pages();
> 637 |     await page.click(tabs[0]);
      |                ^
  638 |   });
    Protocol error (Page.navigate): Invalid parameters url: string value expected

      631 |   test('returns to my app', async() => {
      632 |     const pageTarget = page.target();
    > 633 |     await page.goto(pageTarget.page(), {waitUntil: 'networkidle0'});
          |           ^
      634 |   });
预期/期望的测试行为: “返回到我的应用程序”测试应该无缝地切换上一个选项卡,以便我接下来的所有测试都可以运行并通过

最后的想法/问题:
你们当中有谁是戏谑/木偶表演专家,知道一种轻松切换标签/返回到上一个标签的方法吗?注意:我已经发现了和堆栈溢出,但提供的两种解决方案都不适合我。提前谢谢

事实证明,解决这个问题的方法非常简单。我在车上找到的


很高兴你自己找到了解决问题的方法,我得承认,我希望更多的问题能像你的一样详细、格式合理;
TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'BrowserContext'
    |     property '_browser' -> object with constructor 'Browser'
    --- property '_defaultContext' closes the circle Are you passing a nested JSHandle?
    at JSON.stringify (<anonymous>)

  635 | 
  636 |     let tabs = await global.__BROWSER__.pages();
> 637 |     await page.click(tabs[0]);
      |                ^
  638 |   });
    Protocol error (Page.navigate): Invalid parameters url: string value expected

      631 |   test('returns to my app', async() => {
      632 |     const pageTarget = page.target();
    > 633 |     await page.goto(pageTarget.page(), {waitUntil: 'networkidle0'});
          |           ^
      634 |   });
// index.spec.js
test('returns to my app', async() => {
    const tabs = await global.__BROWSER__.pages();
    await tabs[1].close();
});