Есть ли способ получить элемент XPath с помощью JavaScript в Selenium WebDriver?
Я ищу что-то вроде:
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
Мне нужно получить innerHTML элементов с помощью JS (использовать это в Selenium WebDriver/Java, так как WebDriver не может найти его сам), но как?
Я мог бы использовать атрибут ID, но не все элементы имеют атрибут ID.
[исправлено]
Я использую jsoup, чтобы сделать это на Java. Это работает для моих нужд. Спасибо за ответы. :)
6 ответов
можно использовать document.evaluate
:
вычисляет строку выражения XPath и возвращает результат указанный тип, если это возможно.
Это В3-стандартизированные и весь documentend: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
там также большой введение в сеть разработчиков mozilla: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate
для чего-то вроде $x из api командной строки chrome (для выбора нескольких элементов) попробуйте:
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;
}
этот обзор MDN помог: https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript
вы можете использовать javascript документ.оценить для запуска выражения XPath на DOM. Я думаю, что он так или иначе поддерживается в браузерах обратно в IE 6.
MDN:https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate
IE поддерживает метод selectnodes вместо.
MSDN:https://msdn.microsoft.com/en-us/library/ms754523 (v=против 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");
}
}
убедитесь, что вы используете правильный указатель на нее.
предполагая, что ваша цель состоит в разработке и тестировании запросов xpath для карт экрана. Тогда либо используйте в Chrome. Это позволяет запустить запрос xpath для отображения совпадений. Или в Firefox >9 вы можете сделать то же самое с консоль инструментов веб-разработчика. В более ранней версии используйте X-path-finder или Палий.