Я не могу найти xpath элемента html - PullRequest
0 голосов
/ 21 февраля 2012

Мое приложение можно проверить только в IE, поэтому я попытался добавить ниже букмарклеты для поиска 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();

Я попытался найти xpath элемента в google.com (мне повезло, кнопка)используя вышеупомянутые букмарклеты.Возвращается как // 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 Ответ

2 голосов
/ 21 февраля 2012

Xpath утомителен и хрупок. Я рекомендую начинать с основных тегов HTML. Вы можете получить доступ к любым элементам HTML, чьим родителем является элемент div MainMenu, таким же образом, как я описал "divs" ниже.

@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

Действительно, все, что вам нужно сделать, это указать родительский фрейм и следующий элемент (parent / child):

browser.frame(:how => what).div(:how => what).element
...