2012-02-21 2 views
-1

내 응용 프로그램은 IE에서만 테스트 할 수 있으므로 xpath를 찾기 위해 북마크 아래에 추가를 시도했습니다. html 요소의 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(); 

나는 위의 북마크를 사용하여 google.com (내가 luckly 버튼을 느끼고)에서 요소의 XPath를 발견했습니다. 그것은 // BODY로 반환 [ID @ = 'GSR']

하지만 난 위의 북마크를 사용하여 내 웹 응용 프로그램의 메뉴 요소의 XPath를 찾기 위해 시도 할 때. /HTML/BODY으로 반환됩니다.

내 웹 응용 프로그램에는 별도의 프레임에 메뉴 모음이 있습니다.

<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가 작동하지 않습니다. 나는 프로세스를 자동화하기 위해 watir와 협력 중이다. 의견을 보내주십시오.

+1

watpath를 사용하는 xpath는 거의 항상 어려운 일입니다. watir API 및 객체 모델을 사용하면 코드를 이해하는 것이 훨씬 쉬워지고 부서지기 쉽고 유지하기 어려운 코드를 쉽게 작성할 수 있습니다. Adam의 대답 –

+0

Arunsankar를 참조하십시오 -이 솔루션으로 문제가 해결 되었습니까? –

답변

2

Xpath는 지루하고 연약합니다. 기본 HTML 태그로 시작하는 것이 좋습니다. 아래 "divs"를 설명한 것과 같은 방법으로 상위 요소가 MainMenu div 요소 인 HTML 요소에 액세스 할 수 있습니다.

@browser.frame(:name => "frNav").div(:id => "MainMenu").div.each do |div| 
     #for each div element in the MainMenu div, in the frNav frame 
    puts div.id 
     #write the div id to the console 
end 

당신은 부모 요소에 값을 할당하여 재사용 및 일기 좋게이 작업을 단순화 할 수 있습니다 :

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

MainMenu.div(:id => "ActionMenu_Registration").click 

는 당신이 찾고있는 모두 (부모 프레임과 다음 요소를 지정할 수있다 부모/자식) :

browser.frame(:how => what).div(:how => what).element 
관련 문제