()
| 626 | } |
| 627 | |
| 628 | async _startBrowser() { |
| 629 | this.debugSection('Puppeteer', `Starting browser. Puppeteer available: ${!!puppeteer}, launch available: ${!!puppeteer?.launch}`) |
| 630 | |
| 631 | if (!puppeteer) { |
| 632 | throw new Error('Puppeteer is not loaded. Make sure _init() was called before _startBrowser()') |
| 633 | } |
| 634 | |
| 635 | if (this.isRemoteBrowser) { |
| 636 | try { |
| 637 | this.browser = await puppeteer.connect(this.puppeteerOptions) |
| 638 | } catch (err) { |
| 639 | if (err.toString().indexOf('ECONNREFUSED')) { |
| 640 | throw new RemoteBrowserConnectionRefused(err) |
| 641 | } |
| 642 | throw err |
| 643 | } |
| 644 | } else { |
| 645 | this.browser = await puppeteer.launch(this.puppeteerOptions) |
| 646 | } |
| 647 | |
| 648 | this.browser.on('targetcreated', target => |
| 649 | target |
| 650 | .page() |
| 651 | .then(page => targetCreatedHandler.call(this, page)) |
| 652 | .catch(e => { |
| 653 | console.error('Puppeteer page error', e) |
| 654 | }), |
| 655 | ) |
| 656 | this.browser.on('targetchanged', target => { |
| 657 | this.debugSection('Url', target.url()) |
| 658 | }) |
| 659 | |
| 660 | const existingPages = await this.browser.pages() |
| 661 | const mainPage = existingPages[0] || (await this.browser.newPage()) |
| 662 | |
| 663 | if (existingPages.length) { |
| 664 | // Run the handler as it will not be triggered if the page already exists |
| 665 | targetCreatedHandler.call(this, mainPage) |
| 666 | } |
| 667 | await this._setPage(mainPage) |
| 668 | await this.closeOtherTabs() |
| 669 | |
| 670 | this.isRunning = true |
| 671 | } |
| 672 | |
| 673 | async _stopBrowser() { |
| 674 | this.withinLocator = null |
no test coverage detected