No es posible encontrar localizadores (XPath, CSS), en la página web

Desde Reddy:

Estoy tratando de automatizar la aplicación, tratado primero en encontrar XPath o CSS localizadores que no pueden encontrar ninguna apariencia de marco también dentro del elemento.

Soy capaz de manejar el uso de JavaScript, pero no puede entrar en texto completo en el buscador, que está recortando un poco de texto ,, por favor, ayúdame.

JavaScript que probé.

((JavascriptExecutor)driver).executeScript("return document.querySelector('#app').shadowRoot.querySelector('#base > wego-search-form').shadowRoot.querySelector('div > wego-hotel-search-form').shadowRoot.querySelector('#loc').shadowRoot.querySelector('#item0 > div.disable-select.city-country-name').click();");

((JavascriptExecutor)driver).executeScript("return document.querySelector('#app').shadowRoot.querySelector('#base > wego-search-form').shadowRoot.querySelector('div > wego-hotel-search-form').shadowRoot.querySelector('#dates').shadowRoot.querySelector('#depart').shadowRoot.querySelector('#btn').click();");

Mi escenario quiero hacer clic en el formulario de búsqueda e introduzca algunos detalles de destino, si es posible alguna forma de manejar este caso el uso de localizadores me sugieren

Nrendrari:

Sombra DOM elementos se utilizan en este sitio web. Sombra DOM proporciona encapsulación para el código JavaScript, CSS y plantillas en un componente Web.

Sombra DOM permite oculta árboles DOM para ser conectados a los elementos en el árbol DOM regulares - esta sombra del árbol DOM se inicia con una raíz sombra, debajo de la cual se puede conectar a cualquier elemento que quiera, de la misma manera como el DOM normal.

Consulte este Para obtener detalles acerca de él o para más detalles Google él.

Ahora manejar Sombra elemento de toma de referencia desde este blog . He intentado el siguiente código para introducir texto como se esperaba y su trabajo para mí.

public static WebDriver driver;

public static void main(String[] args){

    System.setProperty("webdriver.chrome.driver", "driver_path");
    driver = new ChromeDriver();
    driver.get("https://www.wego.com.my/hotels");
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    driver.manage().window().maximize();

    WebElement root1 = driver.findElement(By.id("app"));

    WebElement shadowRoot1 = expandRootElement(root1);

    WebElement root2 = shadowRoot1.findElement(By.tagName("wego-search-form"));
    WebElement shadowRoot2 = expandRootElement(root2);

    WebElement root3 = shadowRoot2.findElement(By.tagName("wego-hotel-search-form"));
    WebElement shadowRoot3 = expandRootElement(root3);

    WebElement root4 = shadowRoot3.findElement(By.id("loc"));
    WebElement shadowRoot4 = expandRootElement(root4);
    shadowRoot4.findElement(By.cssSelector("div.root-container div.container")).click();    

    WebElement element = shadowRoot4.findElement(By.id("searchKeywordInput"));
    Actions action = new Actions(driver);
    action.click(element).sendKeys(Keys.chord(Keys.CONTROL, "a"));
    element.sendKeys(Keys.DELETE);
    element.sendKeys("narendra");
}


public static WebElement expandRootElement(WebElement element) {
    WebElement newElement = (WebElement) ((JavascriptExecutor) driver).executeScript("return arguments[0].shadowRoot", element);
    return newElement;
}

Actualizado

Como una alternativa de sendKeys(), JavascriptExecutorse puede utilizar para establecer el valor del cuadro de texto. Uso continuación Código

WebElement element = shadowRoot4.findElement(By.id("searchKeywordInput"));
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
javascriptExecutor.executeScript("arguments[0].value='Your Text Goes Here';", element);

He probado esto tantas tiempo y esto está trabajando muy bien en cada caso.

Nota: el uso JavascriptExecutorno puede desencadenar la sugerencia automática de resultados de búsqueda.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=280554&siteId=1
Recomendado
Clasificación