Puppeteer fails subsequent tests if beforeunload popup shown
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- javascript
- Domaine
- testing
Piste de recherche
Reproduisez le scénario restart:false à partir des extraits HTML et JavaScript fournis, puis inspectez lib/helper/Puppeteer.js autour de la gestion de la boîte de dialogue signalée à la ligne 483 et lib/listener/steps.js autour de la ligne 55. Vérifiez qu’une fenêtre contextuelle beforeunload ne perturbe pas le test suivant et ne provoque pas d’erreurs de fin d’exécution en double, puis confirmez que l’exécution signale le statut d’échec correct.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
}
}
}
- Langage dominant
- JavaScript
- Étoiles
- 4.2k
- Forks
- 756
- Merge moyen
- 2 j 10 h
- PR mergées (30 j)
- 18
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de codeceptjs/CodeceptJS
-
stale
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
codeceptjs/CodeceptJS#5420 · 1 commentaire ·
-
stale
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
codeceptjs/CodeceptJS#5358 · 1 commentaire ·
-
stale
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
codeceptjs/CodeceptJS#4958 · 10 commentaires · 2 réactions ·
-
stale
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
codeceptjs/CodeceptJS#4778 · 3 commentaires ·
-
stale
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
codeceptjs/CodeceptJS#5618 · 1 commentaire ·
Toutes les issues de codeceptjs/CodeceptJS
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
TheOdinProject/curriculum#31423 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
WGBH-MLA/dream-aapb#69 ·
-
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
Mintplex-Labs/anything-llm#6490 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 86/100
openlayers/ol-cesium#1364 ·