0

Watir でいくつかの HTML/Javascript ページを解析していますが、ドロップダウン メニュー内のサブテーブルの 2 つのリンクを区別するのに少し問題がありました。「概要」や「イベント」など、私のテーブル (変更できません) 内には、これの多くのインスタンスがあります。

<td class="nav-td-content-submenu wide-text smaller-text" valign="top">
<a href="javascript: menuManager.check('/Manager/navigate?menuID=system_overview');"
    class="report-group-toggle"
    style="color:black"
    id="report_group_servers"> Servers
</a>
<a  href="javascript: menuManager.check('/Manager/navigate?menuID==system_overview');" 
    title="Overview"
    class="report-group-link">      
     <div>Overview</div>
</a>
<a  href="javascript: menuManager.check('/Manager/SavedReportExec.do?value(reportID)=61&amp;value(menuID)=system.1');"      
    title="Events"
    class="report-group-link">      
    <div>Events</div>
</a>
<a  href="javascript: menuManager.check('/Manager/navigate?menuID=alerts');"        
    title="Alerts"
    class="report-group-link">      
    <div>Alerts</div>
</a>
<a  href="javascript: menuManager.check('/Manager/navigate?menuID=logs');"      
    title="Logs"
    class="report-group-link">      
    <div>Logs</div>
</a>

<a href="javascript: menuManager.check('/Manager/SavedReportExec.do?value(reportID)=62&amp;value(menuID)=agent.1');"
        class="report-group-toggle"
        style="color:black"
        id="report_group_agents"> Agents
</a>
<a  href="javascript: menuManager.check('/Manager/SavedReportExec.do?value(reportID)=62&amp;value(menuID)=agent.1');"       
    title="Overview"
    class="report-group-link">      
    <div>Overview</div>
</a>
<a  href="javascript: menuManager.check('/Manager/SavedReportExec.do?value(reportID)=63&amp;value(menuID)=agent.2');"       
    title="Events"
    class="report-group-link">      
    <div>Events</div>
</a>
<a  href="javascript: menuManager.check('/Manager/navigate?menuID=application_monitoring');"        
    title="Application Monitoring"
    class="report-group-link">      
    <div>Application Monitoring</div>
</a>                    

ドロップダウン メニューは次のようになります。

 Servers
 - Overview      
 - Events    
 - Alerts
 - Logs

 Agents
 - Overview
 - Events
 - Application Monitoring

システムのリンクは、サブセクション内の最初の「概要」に直接移動します。(注: メイン メニュー アイコンは、[サーバー] -> [概要] ページへのリンクでもあります)。

私の問題は、Servers->Overview と Agents->Overview に関連するため、Overview を区別しようとしていることです。

存在を確認し、次のように Servers->Overview に移動できます。

if $browser.link(:id => 'report_group_servers').exists?
    if $browser.link(:id => 'report_group_servers').exists?
        if $browser.link(:title => 'Overview').exists?
            $browser.link(:title => 'Overview').click
        end
    end
end

ただし、Agents->Overview に移動しようとしても、まだ Servers->Overview に移動しているので、次のことを試します。

if $browser.link(:id => 'report_group_agents').exists?
    if $browser.link(:id => 'report_group_agents').exists?
        if $browser.link(:title => 'Overview', :id => 'report_group_agents').exists?
                $browser.link(:title => 'Overview', :id => 'report_group_agents').click
            end
    end
end

表のメイン リンクを調べようとして (サーバーはサーバー -> 概要にリンクし、エージェントはエージェント -> 概要にリンクしているため)、「エージェント」を含むリンクも選択しようとしました。

if $browser.link(:xpath, "//a[contains(.,'Agents')]/")
    $browser.link(:xpath, "//a[contains(.,'Agents')]/").click
end

ただし、「contains」は評価であるため、これはエラーを生成します。これは、エージェントを含むリンクのページ全体をチェックします。これは問題になる可能性があります。

サブテーブルのすべてのリンクが「report-group-link」クラスであると考えると、最初の ID または参照名に基づいて 2 つのリンクを区別するにはどうすればよいでしょうか?

4

1 に答える 1

1

解決策 1 - テキストと href 属性を使用する

2 つの概要リンクは、テキストによって (他のリンクから) および href 属性によって (互いに) 区別できます。最もクリーンな解決策は、次の 2 つの属性を使用することだと思います。

# The Servers > Overview link
browser.link(:text => 'Overview', :href => /system_overview/)

# The Agents > Overview link
browser.link(:text => 'Overview', :href => /SavedReportExec/)

解決策 2 - Xpath

サーバーとエージェントのリンクとの関係に基づいてリンクを見つける必要がある場合、またはリンクを見つけたい場合は、xpath で先行兄弟軸を使用できます。

# The Servers > Overview link
browser.link(:xpath => '//a[preceding-sibling::a[contains(., "Servers")]][contains(., "Overview")]')

# The Agents > Overview link
browser.link(:xpath => '//a[preceding-sibling::a[contains(., "Agents")]][contains(., "Overview")]')

解決策 3 - CSS

xpath は非常に読みにくいため、代わりに css-selector (一般的な兄弟セレクターを使用~) を使用できます。

# The Servers > Overview link
browser.link(:css => '#report_group_servers ~ a[title="Overview"]')

# The Agents > Overview link
browser.link(:css => '#report_group_agents ~ a[title="Overview"]')
于 2013-10-09T11:01:19.977 に答える