Existe uma maneira de obter o elemento por XPath usando JavaScript no WebDriver Selenium?
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
{[[2]} eu preciso de obter o innerHTML de elementos usando JS (para usar isso em selênio WebDriver / Java, uma vez que WebDriver não pode encontrá-lo sozinho), mas como?
eu poderia usar o atributo ID, mas nem todos os elementos têm o atributo ID.
[fixa]
estou a usar o jsoup para o fazer em Java. Isso serve para as minhas necessidades. Obrigado pelas respostas. :)
6 answers
Pode usar document.evaluate
:
Avalia um texto de expressão do XPath e devolve um resultado do tipo especificado, se possível.
É padronizado pela w3 e um documento completo: 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
Há também uma grande introdução na rede de desenvolvedores mozilla: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluateNas Ferramentas do Dev cromado pode executar o seguinte:
$x("some xpath")
Para algo como $x da api da linha de comandos chrome (para seleccionar vários elementos) tente:
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;
}
Este resumo MDN ajudou: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript
Pode usar o documento de javascript .avalie para executar uma expressão XPath no DOM. Acho que é suportado de uma forma ou de outra em navegadores de volta ao IE 6.
MDN: https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate
IE suporta selectNodes em vez disso.
MSDN: https://msdn.microsoft.com/en-us/library/ms754523(v=vs. 85).aspx
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");
}
}
Certifica-te que estás a usar o localizador certo para isso.