Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrong context set when using within #4840

Open
jimmy-sc opened this issue Feb 10, 2025 · 0 comments
Open

Wrong context set when using within #4840

jimmy-sc opened this issue Feb 10, 2025 · 0 comments

Comments

@jimmy-sc
Copy link

Description

After updating to CodeceptJS version 3.6.10 (also occurring in 3.7.0), we noticed that the within functionality no longer works correctly when used with a selector like .modal-dialog. Instead of setting the context to a page or frame object, it sets it to a locator object, which causes an error when trying to execute certain functions.

The error encountered:

context.waitForFunction is not a function

This error occurred in the waitForEnabled function, which expects context to be a page object, but instead it is passed as a locator because of the changes introduced with: #4557
Other helper functions that we found that produce the same error: waitForDisabled, waitNumberOfVisibleElements, waitForValue.
We also observed other functions like waitForText not working correctly inside within (e.g. not finding text inside the within context although it was obviously there).
Specifically this line in the _getContext function breaks this use case, since it now returns this.context even if it is a locator object:

  async _getContext() {
    if ((this.context && this.context.constructor.name === 'FrameLocator') || this.context) {
      return this.context
    }
...

Everything worked fine again after reverting the changes that were introduced by this commit.

Steps to Reproduce

  1. Use the within function with a selector such as .modal-dialog.
  2. Attempt to run a command inside the within block, like waitForEnabled.
  3. Observe the error message.

Example test case:

Feature('Modal Test');

Scenario('Test modal within', async ({ I }) => {
  I.amOnPage('https://example.com'); 
  I.click('.open-modal');
  within('.modal-dialog', async () => {
   I.waitForEnabled('.button')
  });
});

Details

  • CodeceptJS version: 3.6.10 and 3.7.0
  • NodeJS Version: 23.7.0
  • playwright-core version: 1.49.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant