javascript xpath selenium-webdriver document.evaluate

¿Hay alguna forma de obtener elemento mediante XPath usando JavaScript en Selenium WebDriver?



get value xpath javascript (6)

Asumiendo que su objetivo es desarrollar y probar sus consultas xpath para mapas de pantalla. Luego, use las herramientas de desarrollador de Chrome . Esto le permite ejecutar la consulta xpath para mostrar las coincidencias. O en Firefox> 9 puedes hacer lo mismo con la consola de Herramientas de desarrollo web . En versiones anteriores usa x-path-finder o Firebug .

Estoy buscando algo como:

getElementByXpath(//html[1]/body[1]/div[1]).innerHTML

Necesito obtener el innerHTML de los elementos usando JS (para usarlo en Selenium WebDriver / Java, ya que WebDriver no puede encontrarlo por sí mismo), pero ¿cómo?

Podría usar el atributo ID, pero no todos los elementos tienen el atributo ID.

[FIJO]

Estoy usando jsoup para hacerlo en Java. Eso funciona para mis necesidades. Gracias por las respuestas. :)


En Chrome Dev Tools puede ejecutar lo siguiente:

$x("some xpath")


Para algo como $ x de la línea de comando de cromo api (para seleccionar varios elementos) intente:

var xpath = function(xpathToExecute){ var result = []; var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ){ result.push( nodesSnapshot.snapshotItem(i) ); } return result; }

Esta descripción general de MDN ayudó: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript



Puede usar document.evaluate :

Evalúa una cadena de expresión XPath y devuelve un resultado del tipo especificado si es posible.

Está w3-standardized y documentado en su totalidad: https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate

function getElementByXpath(path) { return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; } console.log( getElementByXpath("//html[1]/body[1]/div[1]") );

<div>foo</div>

https://gist.github.com/yckart/6351935

También hay una gran introducción sobre la red de desarrolladores de mozilla: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate


public class JSElementLocator {

@Test public void locateElement() throws InterruptedException{ WebDriver driver = WebDriverProducerFactory.getWebDriver("firefox"); driver.get("https://www.google.co.in/"); WebElement searchbox = null; Thread.sleep(1000); searchbox = (WebElement) (((JavascriptExecutor) driver).executeScript("return document.getElementById(''lst-ib'');", searchbox)); searchbox.sendKeys("hello"); }

}

Asegúrate de estar usando el localizador correcto para ello.