getElementByXPath - Небольшой gist для поиска элемента по XPath на JavaScript


(Сергей Блохин) #1

Может кому пригодится для внутренних тестов.
Небольшой gist для поиска элемента по XPath на JavaScript https://gist.github.com/tit/4695818

document.getElementByXPath = function (sValue) {
    var a = this.evaluate(sValue, this, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
        null);
    if (a.snapshotLength > 0) {
        return a.snapshotItem(0);
    }
};
document.getElementsByXPath = function (sValue) {
    var aResult = new Array();
    var a = this.evaluate(sValue, this, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0; i < a.snapshotLength; i++) {
        aResult.push(a.snapshotItem(i));
    }
    return aResult;
};
document.removeElementsByXPath = function (sValue) {
    var a = this.evaluate(sValue, this, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0; i < a.snapshotLength; i++) {
        a.snapshotItem(i).parentNode.removeChild(a.snapshotItem(i));
    }
};

WebDriver features: Робота с несколькими окнами (вкладками) одновременно при помощи Selenium Web Driver
(Дмитрий Жарий) #2

Прикольно, этот document.evaluate() поддерживается всеми самыми древними версиями браузеров, кроме Internet Explorer


(Mykhailo Poliarush) #3

Помню немного смотрел в эту сторону (правда давно уже) и было сказано, что поддержка document.evaluate есть (посмотрел, что реализовали где-то в 2004 году) но не всегда работает или были какие-то проблемы (или может быть я ошибаюсь :slight_smile: ). Как сейчас, не знаю, может быть @TIT ответит, он у нас любитель internet explorer :smile: тем более у него есть такое отличное решение.