簡體   English   中英

獲取Web元素的絕對XPath

[英]Get Absolute XPath of Web Element

我在以下代碼中使用Javascript來檢索Web元素的絕對XPath

public String getAbsoluteXPath(WebDriver driver)
{
    return  (String) 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]);", this.element);

}

通常,這會產生正確的結果。 但是,如果我導航到stackoverflow.com並嘗試檢索XPath ID為的元素的XPath: .//*[@id='hot-network-questions']/h4/a 'hot-network .//*[@id='hot-network-questions']/h4/a '] / .//*[@id='hot-network-questions']/h4/a (“熱門網絡問題”) )實際/預期的XPath(根據Firebug )是: html/body/div[3]/div/div[3]/div[3]/h4/a但是這個腳本錯誤地產生了以下值: /html[1]/body[1]/div[3]/div[1]/div[3]/div[4]/h4[1]/a[1]

注意div [3]和div [4]之間的差異。

當前頁面上,當您嘗試識別WebElement時,您的代碼會向我返回以下值

/html[1]/body[1]/div[3]/div[1]/div[1]/div[4]/div[6]/h4[1]/a[1]

可能這取決於您與網站的會話以及當時正在顯示的部分; 您可以在執行此代碼的同一會話中嘗試通過xpath進行查看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM