codeceptjs / codeceptjs/CodeceptJS

Wrong context set when using within

Abierto
#4,840 1 comentario 0 reacciones 0 asignados Ver en GitHub
stale
Lenguaje dominante
JavaScript
Estrellas
4.2k
Forks
757
Merge medio
2 d 9 h
PR fusionados (30 d)
16

Descripción

## 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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.