codeceptjs / codeceptjs/CodeceptJS

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

Offen
#4,346 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
stale
Vorherrschende Sprache
JavaScript
Sterne
4.2k
Forks
757
Ø Merge
2 T. 9 Std.
Gemergte PRs (30 T.)
16

Beschreibung

#### 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
```feature
# Playground.feature

Feature: Play around
Scenario: Playground
Given I want to test healers
```

```ts
// 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");
});
```

```ts
// 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:

```js
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'
}

```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

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