es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

$(…).parentElement no es una función – Problema de WebDriver IO / TypeScript

De acuerdo, el objetivo es simple. Necesito ir desde la raíz hasta llegar a su padre y según la documentación de webdriver debería lucir más o menos así:

it('should get class from parent element', async () => {
 const elem = await $$('p');
 const parent = await elem[2].parentElement();
 console.log(await parent.getAttribute('class'));  // outputs: "parent"
});

En mi caso, donde estoy utilizando la versión sincrónica, se ve así:

public isErrorDisplayed(): boolean {
  const parent = browser.call(async () => {
    return await $(this.root).parentElement();
 });

 return parent.getAttribute("class").includes("Mui-error");
}

Tuve que envolver parentElement() porque el compilador afirmaba que devolvería Promise<webdriver.io>, lo cual estaría bien si no estuviéramos en modo @wdio/sync ¡Así que no debería ser necesario usar async/await.

Aplicando la “solución”, dice que:

$(...).parentElement is not a function

lo cual en realidad es visible y propuesto por VS Code.

Estoy utilizando node 14.17.1, que debería ser compatible con el modo @wdio/sync y es compatible claramente con el resto del código :)</webdriver.io>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en TypeScript y WebDriver-IO, me encontré con un problema al intentar capturar el elemento padre utilizando la versión sincrónica de WebDriver-IO. Según la documentación de WebDriver, debería verse algo así:

    it('should get class from parent element', async () => {
      const elem = await $$('p');
      const parent = await elem[2].parentElement();
      console.log(await parent.getAttribute('class'));  // outputs: "parent"
    });
    

    Sin embargo, en mi caso, tuve que envolver parentElement() en una función browser.call() porque el compilador de TypeScript afirmaba que devolvería un tipo Promise<webdriver.io>, lo cual está bien en modo asíncrono pero no en modo sincrónico. Así que intenté la solución alternativa pero recibí un error que decía "$(...).parentElement is not a function". Estoy utilizando Node.js versión 14.17.1, que admite el modo @wdio/sync y funciona bien con el resto de mi código. Continuaré investigando este problema e intentaré encontrar una solución para capturar el elemento padre utilizando la versión sincrónica de WebDriver-IO.</webdriver.io>

Comments are closed.