要检索给定WebElement的Xpath

Sum*_*ole 0 c# java selenium xpath selenium-webdriver

使用Selenium WebDriver,我可以在页面中找到所有Web元素的列表。我想编写一个函数,该函数将向我返回所传递元素的XPath字符串。

函数调用将类似于: String XpathOfElement = myWebDriver.getXpath(My_Web_Element)

提示:-我认为我们可以使用javascript(使用JavaScriptExecuter)。但不熟悉javascript。

4m0*_*m01 6

检查这篇文章,我写了代码以获得绝对的XPath。

public static String getAbsoluteXPath(WebElement element)
{
    return (String) ((JavascriptExecutor) driver).executeScript(
            "function absoluteXPath(element) {"+
                    "var comp, comps = [];"+
                    "var parent = null;"+
                    "var xpath = '';"+
                    "var getPos = function(element) {"+
                    "var position = 1, curNode;"+
                    "if (element.nodeType == Node.ATTRIBUTE_NODE) {"+
                    "return null;"+
                    "}"+
                    "for (curNode = element.previousSibling; curNode; curNode = curNode.previousSibling) {"+
                    "if (curNode.nodeName == element.nodeName) {"+
                    "++position;"+
                    "}"+
                    "}"+
                    "return position;"+
                    "};"+

                    "if (element instanceof Document) {"+
                    "return '/';"+
                    "}"+

                    "for (; element && !(element instanceof Document); element = element.nodeType == Node.ATTRIBUTE_NODE ? element.ownerElement : element.parentNode) {"+
                    "comp = comps[comps.length] = {};"+
                    "switch (element.nodeType) {"+
                    "case Node.TEXT_NODE:"+
                    "comp.name = 'text()';"+
                    "break;"+
                    "case Node.ATTRIBUTE_NODE:"+
                    "comp.name = '@' + element.nodeName;"+
                    "break;"+
                    "case Node.PROCESSING_INSTRUCTION_NODE:"+
                    "comp.name = 'processing-instruction()';"+
                    "break;"+
                    "case Node.COMMENT_NODE:"+
                    "comp.name = 'comment()';"+
                    "break;"+
                    "case Node.ELEMENT_NODE:"+
                    "comp.name = element.nodeName;"+
                    "break;"+
                    "}"+
                    "comp.position = getPos(element);"+
                    "}"+

                    "for (var i = comps.length - 1; i >= 0; i--) {"+
                    "comp = comps[i];"+
                    "xpath += '/' + comp.name.toLowerCase();"+
                    "if (comp.position !== null) {"+
                    "xpath += '[' + comp.position + ']';"+
                    "}"+
                    "}"+

                    "return xpath;"+

                    "} return absoluteXPath(arguments[0]);", element);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果有人在寻找普通的JavaScript代码:https://gist.github.com/beatngu13/a3312b98de57610c5ecd27ea84a7fbeb (3认同)
  • 在 Chrome 62 上工作得很好。我用它来获取可见元素的 Xpath,然后将此 Xpath 用作字符串并修改它以用作另一个元素的定位器:) 谢谢 Amol! (2认同)