Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Puppeteer fails subsequent tests if beforeunload popup shown

Offen
#3,068 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
javascript
Bereich
testing

Rechercherichtung

Reproduzieren Sie das Szenario restart:false aus den bereitgestellten HTML- und JavaScript-Snippets und untersuchen Sie anschließend lib/helper/Puppeteer.js im Bereich der in Zeile 483 gemeldeten Dialogbehandlung sowie lib/listener/steps.js im Bereich von Zeile 55. Überprüfen Sie, dass ein beforeunload-Popup den folgenden Test nicht beeinträchtigt und keine doppelten Abschlussfehler verursacht, und bestätigen Sie, dass der Lauf den korrekten Fehlerstatus meldet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

What are you trying to achieve?

When testing a page which shows a popup on unload (beforeunload event), CodeceptJS fails if restart: false is set.

The issue is not present when restart: true is set.

Additionally, process exits with code 0, indicating a success.

I couldn't successfully accept the popup, and I tried at the end of the first test, at the beginning on the second test, and in _before handler.

Example project: https://github.com/dejanceltra/codeceptjs-popup-issue
CodeceptJS run: https://github.com/dejanceltra/codeceptjs-popup-issue/runs/3836071868

What do you get instead?
npx codeceptjs run
  shell: /usr/bin/bash -e {0}
creating output directory: /home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/output
CodeceptJS v3.1.3
Using test root "/home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue"

test --

  ✔ test something in 133ms
Popup already exists and was not closed. Popups must always be closed by calling either I.acceptPopup() or I.cancelPopup()

  ✖ test something 2 in 109ms
Error processing test.passed event:
TypeError: Cannot convert undefined or null to object
    at EventEmitter.<anonymous> (/home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/node_modules/codeceptjs/lib/listener/steps.js:55:5)
    at EventEmitter.emit (node:events:402:35)
    at Object.emit (/home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/node_modules/codeceptjs/lib/event.js:145:28)
    at /home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/node_modules/codeceptjs/lib/scenario.js:96:15

  ✖ test something 2 in 109ms

-- FAILURES:

  1) test
       test something 2:
     Uncaught Cannot accept dialog which is already handled!
      at Object.assert (node_modules/puppeteer/lib/cjs/puppeteer/common/assert.js:26:15)
      at Dialog.accept (node_modules/puppeteer/lib/cjs/puppeteer/common/Dialog.js:79:21)
      at /home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/node_modules/codeceptjs/lib/helper/Puppeteer.js:483:25
  
  Scenario Steps:
  - I.amOnPage("https://example.com") at Test.<anonymous> (./test_test.js:9:7)
  

  2) test
       test something 2:
     Error: done() called multiple times in test <test: test something 2> of file /home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/test_test.js
      at /home/runner/work/codeceptjs-popup-issue/codeceptjs-popup-issue/node_modules/codeceptjs/lib/scenario.js:99:41


  FAIL  | 1 passed, 2 failed   // 1s
Run with --verbose flag to see complete NodeJS stacktrace

Provide test source code if related

<script>
    window.addEventListener("beforeunload", function(event) {
        event.returnValue = "message";
    });
</script>
Feature('test');

Scenario('test something', ({ I }) => {
    I.amOnPage(`file://${process.cwd()}/test.html`);
});


Scenario('test something 2', ({ I }) => {
    I.amOnPage('https://example.com');
});
Details
  • CodeceptJS version: 3.1.2
  • NodeJS Version: v16.9.1
  • Operating System: macOS | Linux
  • puppeteer: 10.4.0
  • Configuration file:
const { setHeadlessWhen } = require('@codeceptjs/configure');

// turn on headless mode when running with HEADLESS=true environment variable
// export HEADLESS=true && npx codeceptjs run
setHeadlessWhen(process.env.HEADLESS);

exports.config = {
  tests: './*_test.js',
  output: './output',
  helpers: {
    Puppeteer: {
      restart: false,
      url: 'http://localhost',
      show: false,
      windowSize: '1200x900'
    }
  },
  bootstrap: null,
  mocha: {},
  name: 'puppeteer-test',
  plugins: {
    pauseOnFail: {},
    retryFailedStep: {
      enabled: true
    },
    tryTo: {
      enabled: true
    },
    screenshotOnFail: {
      enabled: true
    }
  }
}
Vorherrschende Sprache
JavaScript
Sterne
4.2k
Forks
756
Ø Merge
2 T. 10 Std.
Gemergte PRs (30 T.)
18

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus codeceptjs/CodeceptJS

Alle Issues in codeceptjs/CodeceptJS

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.