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

`I.waitForURL()` does not fail the test when its timeout happens

Offen
#4,346 2 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
32/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
playwright, typescript
Bereich
testing-qa

Rechercherichtung

Reproduziere das Szenario aus playground.ts mit dem Healer in heal.ts und verfolge dann den Einstiegspunkt I.waitForURL im Playwright Helper sowie, wie sein Timeout gemeldet wird. Erledigt ist die Aufgabe, wenn das Timeout das Szenario fehlschlagen lässt, den späteren Klick und den Healer an der Ausführung hindert und die relevante Fehlausgabe erhält.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

stale
What are you trying to achieve?

Wait for the page to navigate to a certain URL and fail the test if it doesn't navigate within the defined timeout

What do you get instead?

The test does not fail. As per the source code, we should never get to I.click("#fake-id");, but we do. Also, In the below source code, the log after I.waitForURL() is never printed. Where does it disappear to? The log that's printed is the one that's within the healer, HEALING A FAILED CLICK STEP:#fake-id.

Provide test source code if related

# Playground.feature

Feature: Play around
  Scenario: Playground
    Given I want to test healers
// playground.ts

Given("I want to test healers", () => {
  I.amOnPage("https://github.com/codeceptjs/CodeceptJS/issues");
  I.say("before waitForURL");
  I.waitForURL("https://fake-url", {
    timeout: 10000,
    waitUntil: "load"
  });

  I.say("after waitForURL");
  I.click("#fake-id");
});
// heal.ts

const { heal, ai } = require("codeceptjs");

heal.addRecipe("waitForVisibleThenClick", {
  priority: 1,
  steps: [
    "click"
  ],
  fn: async ({ step }) => {
    const locator = step.args[0];

    return ({ I }) => {
      I.say("HEALING A FAILED CLICK STEP:" + locator);

      I.waitForVisible(locator, 9);
      I.click(locator);
    };
  },
});

This is what is displayed on the logs after the test run:

Play around --
  Playground
   Given I want to test healers ""
   before waitForURL <--------------------------------------------- see here
    I say "HEALING A FAILED CLICK STEP:#fake-id" <----------------- and here
   HEALING A FAILED CLICK STEP:#fake-id  <------------------------- and here
    I wait for visible "#fake-id", 9
  × FAILED in 29095ms


-- FAILURES:

  1) Play around
       Playground:
     element (#fake-id) still not visible after 9 sec
locator.waitFor: Timeout 9000ms exceeded.
Call log:
  - waiting for locator('#fake-id').first() to be visible

  Error: element (#fake-id) still not visible after 9 sec
  locator.waitFor: Timeout 9000ms exceeded.
  Call log:

  Scenario Steps:
  - I.waitForURL("https://fake-url", {"timeout":10000,"waitUntil":"load"}) at .\tests\steps\playground.ts:21:5
  - I.say("before waitForURL") at .\tests\steps\playground.ts:20:5
  - I.amOnPage("https://github.com/codeceptjs/CodeceptJS/issues") at .\tests\steps\playground.ts:19:5

Details
  • CodeceptJS version: 3.6.2
  • NodeJS Version: 20.12.2
  • Operating System: Windows 11
  • Helper: Playwright Helper
  • Configuration file:
require('./heal')

export const config: CodeceptJS.MainConfig = {
  output: './output',
  helpers: {
    Playwright: {
      url: "https://github.com/codeceptjs/CodeceptJS/issues",
      show: false,
      browser: 'chromium'
    }
  },
  gherkin: {
    features: ["./tests/**/features/Playground.feature"],
    steps: "./tests/**/steps/*.ts"
    // steps: ["./stock_take_service/steps/given.ts", "./stock_take_service/steps/when.ts", "./stock_take_service/steps/then.ts"]
  },
  include: {
    I: './steps_file',
  },
  plugins: {
    heal: {
      enabled: true
    }
  },
  name: 'playground'
}

Vorherrschende Sprache
JavaScript
Sterne
4.2k
Forks
756
Ø Merge
2 T. 9 Std.
Gemergte PRs (30 T.)
16

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.