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.

Javascript (WebdriverIO) – transformando el elemento shadow (JSpath) en WebElement

Tengo un elemento shadow-root que puedo ver en la consola de mi navegador. Ejemplo:

document.querySelector(".class").shadowRoot.querySelector(".button")

En Java (Selenium WebDriver), pude usar el comando de clic de Selenium utilizando algo como:

JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement el = (WebElement) js.executeScript("return document.querySelector('.class').shadowRoot.querySelector('.button')");
el.click();

En Javascript (WebdriverIO), puedo hacer clic en el mismo elemento utilizando execute() y agregando click() al JSpath:

browser.execute("document.querySelector('.class').shadowRoot.querySelector('.button').click()")

Pero quiero saber si hay una alternativa a este clic en Javascript. ¿Es posible convertir el JSpath a un WebElement como lo hice en Java?
Quiero utilizar el método browser.click(selector) de WebdriverIO. Intenté:

var obj = browser.execute("return document.querySelector('.class').shadowRoot.querySelector('.button')")
var el = browser.elements(obj); //¿cómo convertirlo???
browser.click(el);

También vi a otros que utilizan $(selector).shadow$(selector). Pero quiero intentar usar mi JSpath original (document.querySelector…).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en javascript, java, selenium-webdriver, webdriver-io, puedo confirmar que existe una alternativa al método de clic en Javascript. De hecho, puedes convertir el JSpath en un objeto WebElement para poder utilizar el método browser.click(selector) en WebdriverIO.

    Para hacer esto, puedes utilizar el método $() en WebdriverIO, que es una forma abreviada de browser.element(selector). Este método devuelve un objeto WebdriverIO Element, que puede ser utilizado con el método browser.click().

    Aquí tienes un ejemplo:

    var el = $('body /deep/ .class .button');
    browser.click(el);
    

    En este ejemplo, estamos utilizando el método $() para convertir el JSpath en un objeto WebdriverIO Element. Luego, pasamos ese objeto al método browser.click() para realizar el clic.

    Ten en cuenta que hemos utilizado el combinador /deep/ en el JSpath, que se utiliza para seleccionar elementos dentro de una shadow root.

    Espero que esto te sea útil. Avísame si tienes alguna otra pregunta.

Comments are closed.