Есть ли способ получить элемент 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


в Chrome Dev Tools вы можете запустить следующее:

$x("some xpath")

для чего-то вроде $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 или Палий.