gpt4 book ai didi

internet-explorer - 相当于 Internet Explorer 中 Firebug 的 "Copy XPath"?

转载 作者:行者123 更新时间:2023-12-04 01:01:48 25 4
gpt4 key购买 nike

我有一个仅限 Internet Explorer 的 Web 应用程序。

我正在探索我们可以做些什么来自动化测试。

Selenium 看起来是一个很好的工具,但是为了能够激活链接等,我需要告诉它它们在哪里。应用程序的构建并没有考虑到这种测试,所以通常没有 id关键元素的属性。

没问题,我想,我可以使用 XPath 表达式。但是,如果通过检查页面的源代码来为按钮找到正确的 XPath,则是一件非常痛苦的事情。

使用 Firefox/Firebug,我可以选择元素,然后使用“复制 XPath”来获取表达式。

我有 IE 开发人员工具栏,它非常接近。我可以单击以选择感兴趣的元素并显示有关它的各种信息。但我看不到任何方便的方法来确定它的 XPath。

那么有没有办法用IE来做到这一点?

最佳答案

我会使用书签。我有一个与 XPath 相关的,但我不知道它是否适用于 IE。我得走了,但我会测试它并给它,如果它适用于 IE。

来自我的书签的两个面向 Web 开发人员的书签站点:Subsimple's bookmarkletsSquarefree's Bookmarklets .里面有很多有用的东西...

[编辑] 好的,我回来了。我拥有的书签仅适用于 FF,并不是最佳选择。我最终重写了它,尽管使用了原始想法。找不到我找到它的地方。

扩展JS:

function getNode(node)
{
var nodeExpr = node.tagName;
if (nodeExpr == null) // Eg. node = #text
return null;
if (node.id != '')
{
nodeExpr += "[@id='" + node.id + "']";
// We don't really need to go back up to //HTML, since IDs are supposed
// to be unique, so they are a good starting point.
return "/" + nodeExpr;
}
// We don't really need this
//~ if (node.className != '')
//~ {
//~ nodeExpr += "[@class='" + node.className + "']";
//~ }
// Find rank of node among its type in the parent
var rank = 1;
var ps = node.previousSibling;
while (ps != null)
{
if (ps.tagName == node.tagName)
{
rank++;
}
ps = ps.previousSibling;
}
if (rank > 1)
{
nodeExpr += '[' + rank + ']';
}
else
{
// First node of its kind at this level. Are there any others?
var ns = node.nextSibling;
while (ns != null)
{
if (ns.tagName == node.tagName)
{
// Yes, mark it as being the first one
nodeExpr += '[1]';
break;
}
ns = ns.nextSibling;
}
}
return nodeExpr;
}

var currentNode;
// Standard (?)
if (window.getSelection != undefined)
currentNode = window.getSelection().anchorNode;
// IE (if no selection, that's BODY)
else
currentNode = document.selection.createRange().parentElement();
if (currentNode == null)
{
alert("No selection");
return;
}
var path = [];
// Walk up the Dom
while (currentNode != undefined)
{
var pe = getNode(currentNode);
if (pe != null)
{
path.push(pe);
if (pe.indexOf('@id') != -1)
break; // Found an ID, no need to go upper, absolute path is OK
}
currentNode = currentNode.parentNode;
}
var xpath = "/" + path.reverse().join('/');
alert(xpath);
// Copy to clipboard
// IE
if (window.clipboardData) clipboardData.setData("Text", xpath);
// FF's code to handle clipboard is much more complex
// and might need to change prefs to allow changing the clipboard content.
// I omit it here as it isn't part of the original request.

您必须选择元素并激活书签以获取其 XPath。

现在,书签版本(感谢 Bookmarklet Builder ):

IE
(我不得不把它分成两部分,因为 IE 不喜欢很长的书签(最大大小因 IE 版本而异!)。你必须激活第一个(功能 def)然后第二个。用 IE6 测试。 )
javascript:function getNode(node){var nodeExpr=node.tagName;if(!nodeExpr)return null;if(node.id!=''){nodeExpr+="[@id='"+node.id+"']";return "/"+nodeExpr;}var rank=1;var ps=node.previousSibling;while(ps){if(ps.tagName==node.tagName){rank++;}ps=ps.previousSibling;}if(rank>1){nodeExpr+='['+rank+']';}else{var ns=node.nextSibling;while(ns){if(ns.tagName==node.tagName){nodeExpr+='[1]';break;}ns=ns.nextSibling;}}return nodeExpr;}
javascript:function o__o(){var currentNode=document.selection.createRange().parentElement();var path=[];while(currentNode){var pe=getNode(currentNode);if(pe){path.push(pe);if(pe.indexOf('@id')!=-1)break;}currentNode=currentNode.parentNode;}var xpath="/"+path.reverse().join('/');clipboardData.setData("Text", xpath);}o__o();

FF
javascript:function o__o(){function getNode(node){var nodeExpr=node.tagName;if(nodeExpr==null)return null;if(node.id!=''){nodeExpr+="[@id='"+node.id+"']";return "/"+nodeExpr;}var rank=1;var ps=node.previousSibling;while(ps!=null){if(ps.tagName==node.tagName){rank++;}ps=ps.previousSibling;}if(rank>1){nodeExpr+='['+rank+']';}else{var ns=node.nextSibling;while(ns!=null){if(ns.tagName==node.tagName){nodeExpr+='[1]';break;}ns=ns.nextSibling;}}return nodeExpr;}var currentNode=window.getSelection().anchorNode;if(currentNode==null){alert("No selection");return;}var path=[];while(currentNode!=undefined){var pe=getNode(currentNode);if(pe!=null){path.push(pe);if(pe.indexOf('@id')!=-1)break;}currentNode=currentNode.parentNode;}var xpath="/"+path.reverse().join('/');alert(xpath);}o__o();

关于internet-explorer - 相当于 Internet Explorer 中 Firebug 的 "Copy XPath"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/214862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com