codeceptjs / codeceptjs/CodeceptJS

Wrong context set when using within

Open
#4,840 1 comment 0 reactions 0 assignees View on GitHub
stale
Dominant language
JavaScript
Stars
4.2k
Forks
757
Avg merge
2d 9h
Merged PRs (30d)
16

Description

## 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:
```plaintext
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:

```javascript
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:
```javascript
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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.