Skip to content

Playwright Helper - Improve and fix issues of wait* methods #5092

Description

@kobenguyent

Status Quo

Current playwright helper implementations for wait* methods may cause potential issues like not waiting as expected, waiting too much, etc.

Analysis
Analyze the potential issues of all wait* methods in Playwright Helper.

Action

  • fix issues
  • improve the code quality
  • add more unit tests
  • add more acceptance tests

Here is a reported issue

@kobenguyent I patched my Playwright.js by the fix and it works well, no delay occurs when the test finishes.

But there is a regression 🐛 - I.waitForText() doesn't wait for waitForTimeout if the string can't be found. It waits for a short time only.

Could you reopen it?

test:

Feature("My");

Scenario("test something", ({ I }) => {
I.amOnPage("https://codecept.io/");
I.waitForText("CodeceptJS ‐ superchargedx");
});
Before the fix - the method waits for 30 secs ✔️

Aug 21 18:54:45 My --
Aug 21 18:54:45 /home/mirao/workspace/my/My_test.ts
Aug 21 18:54:45 [1] Starting recording promises
Aug 21 18:54:45 Timeouts: Aug 21 18:54:45 › [Session] Starting singleton browser session
Aug 21 18:54:45 test something
Aug 21 18:54:45 › [New Session] {"ignoreHTTPSErrors":false,"acceptDownloads":true}
Aug 21 18:54:45 Scenario()
Aug 21 18:54:45 I am on page "https://codecept.io/"
Aug 21 18:54:46 I wait for text "CodeceptJS ‐ superchargedx"
Aug 21 18:55:16 [1] Error (Non-Terminated) | Text "CodeceptJS ‐ superchargedx" was not found on page after 30 sec. | err => { step.status = 'failed' step.endTime = +Da...
Aug 21 18:55:16 [1] Error | Error: [Wrapped Error] "Text \"CodeceptJS ‐ superchargedx\" was not found on page after 30 sec." undefined...
Aug 21 18:55:16 [1] <teardown> Stopping recording promises
Aug 21 18:55:16 › <screenshotOnFail> Test failed, try to save a screenshot
Aug 21 18:55:16 › [Screenshot] output/test_something.failed.png
Aug 21 18:55:17 ✖ FAILED in 31314ms
Aug 21 18:55:17 Aug 21 18:55:17 [2] Starting recording promises
Aug 21 18:55:17 Aug 21 18:55:17 -- FAILURES:
Aug 21 18:55:17 Aug 21 18:55:17 1) My
Aug 21 18:55:17 test something:
Aug 21 18:55:17 Aug 21 18:55:17 [Wrapped Error] "Text \"CodeceptJS ‐ superchargedx\" was not found on page after 30 sec."
Aug 21 18:55:17 at /home/mirao/workspace/my/node_modules/codeceptjs/lib/recorder.js:280:15
Aug 21 18:55:17 Aug 21 18:55:17 Aug 21 18:55:17 ◯ File: /home/mirao/workspace/my/My_test.ts
Aug 21 18:55:17 Aug 21 18:55:17 ◯ Scenario Steps:
Aug 21 18:55:17 ✖ I.waitForText("CodeceptJS ‐ superchargedx") at Test.<anonymous> (./My_test.ts:5:5)
Aug 21 18:55:17 ✔ I.amOnPage("https://codecept.io/") at Test.<anonymous> (./My_test.ts:4:5)
Aug 21 18:55:17 Aug 21 18:55:17 ◯ Artifacts:
Aug 21 18:55:17 - screenshot: /home/mirao/workspace/my/output/test_something.failed.png
Aug 21 18:55:17 Aug 21 18:55:17 ◯ Metadata:
Aug 21 18:55:17 - browser: chromium
Aug 21 18:55:17 - browserVersion: 139.0.7258.5
Aug 21 18:55:17 - windowSize: 1280x720
Aug 21 18:55:17 Aug 21 18:55:17 Aug 21 18:55:17 FAIL | 0 passed, 1 failed // 32s

After the fix - the method waits for 4 secs only 🐛

Aug 21 18:56:24 My --
Aug 21 18:56:24 /home/mirao/workspace/my/My_test.ts
Aug 21 18:56:24 [1] Starting recording promises
Aug 21 18:56:24 Timeouts: Aug 21 18:56:24 › [Session] Starting singleton browser session
Aug 21 18:56:24 test something
Aug 21 18:56:24 › [New Session] {"ignoreHTTPSErrors":false,"acceptDownloads":true}
Aug 21 18:56:24 Scenario()
Aug 21 18:56:24 I am on page "https://codecept.io/"
Aug 21 18:56:25 I wait for text "CodeceptJS ‐ superchargedx"
Aug 21 18:56:29 [1] Error (Non-Terminated) | Text "CodeceptJS ‐ superchargedx" was not found on page after 30 sec. | err => { step.status = 'failed' step.endTime = +Da...
Aug 21 18:56:29 [1] Error | Error: [Wrapped Error] "Text \"CodeceptJS ‐ superchargedx\" was not found on page after 30 sec." undefined...
Aug 21 18:56:29 [1] <teardown> Stopping recording promises
Aug 21 18:56:29 › <screenshotOnFail> Test failed, try to save a screenshot
Aug 21 18:56:29 › [Screenshot] output/test_something.failed.png
Aug 21 18:56:29 ✖ FAILED in 5052ms
Aug 21 18:56:29 Aug 21 18:56:29 [2] Starting recording promises
Aug 21 18:56:29 Aug 21 18:56:29 -- FAILURES:
Aug 21 18:56:29 Aug 21 18:56:29 1) My
Aug 21 18:56:29 test something:
Aug 21 18:56:29 Aug 21 18:56:29 [Wrapped Error] "Text \"CodeceptJS ‐ superchargedx\" was not found on page after 30 sec."
Aug 21 18:56:29 at /home/mirao/workspace/my/node_modules/codeceptjs/lib/recorder.js:280:15
Aug 21 18:56:29 Aug 21 18:56:29 Aug 21 18:56:29 ◯ File: /home/mirao/workspace/my/My_test.ts
Aug 21 18:56:29 Aug 21 18:56:29 ◯ Scenario Steps:
Aug 21 18:56:29 ✖ I.waitForText("CodeceptJS ‐ superchargedx") at Test.<anonymous> (./My_test.ts:5:5)
Aug 21 18:56:29 ✔ I.amOnPage("https://codecept.io/") at Test.<anonymous> (./My_test.ts:4:5)
Aug 21 18:56:29 Aug 21 18:56:29 ◯ Artifacts:
Aug 21 18:56:29 - screenshot: /home/mirao/workspace/my/output/test_something.failed.png
Aug 21 18:56:29 Aug 21 18:56:29 ◯ Metadata:
Aug 21 18:56:29 - browser: chromium
Aug 21 18:56:29 - browserVersion: 139.0.7258.5
Aug 21 18:56:29 - windowSize: 1280x720
Aug 21 18:56:29 Aug 21 18:56:29 Aug 21 18:56:29 FAIL | 0 passed, 1 failed // 5s

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions