Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我找不到html元素的xpath_Xpath_Element_Watir - Fatal编程技术网

我找不到html元素的xpath

我找不到html元素的xpath,xpath,element,watir,Xpath,Element,Watir,我的应用程序只能在IE中测试,所以我尝试添加以下bookmarklet来查找xpath 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(

我的应用程序只能在IE中测试,所以我尝试添加以下bookmarklet来查找xpath

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();
我试着使用上面的bookmarklet在google.com中查找元素的xpath(我感觉很幸运)。它返回为//BODY[@id='gsr']

但是,当我试图使用上述bookmarklet在web应用程序中查找menu元素的xpath时。它返回为/HTML/BODY

我的web应用程序在单独的框架中具有菜单栏

<frameset name="fr" id="fr" border="0" frameBorder="NO" frameSpacing="0" marginwidth="0" >
<frame name="frNav" src="navi.esp" ">
    <html>
    <head>
    .......
    </head>
    <body class="GlobalNavBackground" onload="InitializePage();" onunload="" onresize="DisplayChange()">
    <div id="MainMenu" style="display: none;">
            <div tabIndex="-1" class="ActionMenuDropDown" id="ActionMenu_Registration" onblur="HideDropdown(this);">
                <div class="active" onmouseover="this.className='selected';" onmouseout="this.className='active';" onclick=('/registration.esp?'>


Xpath既单调又脆弱。我建议从基本HTML标记开始。您可以访问父元素是MainMenu div元素的任何HTML元素,方法与我在下面描述的“div”相同

通过为父元素指定值,可以简化此过程,以实现重用和可读性:

MenuFrame = @browser.frame(:name => "frNav")
MainMenu = MenuFrame.div(:id => "MainMenu")

MainMenu.div(:id => "ActionMenu_Registration").click
实际上,您要做的就是指定父帧和下一个元素(父/子):


将xpath与watir一起使用几乎总是很难做到的。watirapi和对象模型使得理解代码变得更加容易,并且创建的代码不易损坏,也不难维护。看看亚当的回答-这个解决方案解决了你的问题吗?
MenuFrame = @browser.frame(:name => "frNav")
MainMenu = MenuFrame.div(:id => "MainMenu")

MainMenu.div(:id => "ActionMenu_Registration").click
browser.frame(:how => what).div(:how => what).element