¿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 w3-standardized de javascript para ejecutar una expresión XPath en el DOM. Creo que es compatible de una manera u otra en los navegadores con IE 6.
MDN: https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate
IE admite selectNodes en selectNodes lugar.
MSDN: selectNodes
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.