2

既存の Web アプリケーションの自動テストを調査しています。XPath で特定のドキュメント ノードを選択しようとしたときに、次の問題が発生しました。

特定の画面で、アプリケーションは 5 つのタブを持つタブ コントロールを表示します。このタブ コントロールの背後にある生の HTML は次のとおりです。

<ul class="tab_set-tabs">
    <span id="forTab">
        <li class="tab_set-tabSelectionAware">
            <a href="javascript:void(0);" id="tabOption_tabSet1">
                <strong id="tabOption_tabSet1" class="">
                    Vendor
                </strong>   
            </a>
        </li>
    </span><span id="forTab_0">
        <li class="tab_set-tabSelectionAware">
            <a href="javascript:void(0);" id="tabOption_tabSet2">
                <strong id="tabOption_tabSet2" class="">
                    Ship To
                </strong>   
            </a>
        </li>
    </span><span id="forTab_1">
        <li class="tab_set-tabSelectionAware">
            <a href="javascript:void(0);" id="tabOption_tabSet3">
                <strong id="tabOption_tabSet3" class="">
                    Comments
                </strong>   
            </a>
        </li>
    </span><span id="forTab_2">
        <li class="tab_set-tabSelectionAware">
            <a href="javascript:void(0);" id="tabOption_tabSet4">
                <strong id="tabOption_tabSet4" class="">
                    Custom
                </strong>   
            </a>
        </li>
    </span><span id="forTab_3">
        <li class="tab_set-tabSelectionAware">
            <a href="javascript:void(0);" id="tabOption_tabSet5">
                <strong id="tabOption_tabSet5" class="">
                    History
                </strong>   
            </a>
        </li>
    </span>
</ul>

ご覧のとおり、5 つの兄弟 "スパン" ノードがあり、それぞれが 5 つのタブの 1 つを表しています。しかし、IE9 の開発者ツールで HTML の同じセクションを見ると、次のように表示されます。

IE DevTools のスクリーン キャップを投稿しようとしましたが、新しいユーザーとしてサイトで許可されていないため、ここに私が見ているものの概算を示します。

[-] <ul class="tab_seet-tabs>
    [-] <span id="forTab">
        [-] <li ...>
            [+] <a ...>
            [-] <span id="forTab_0">
                [-] <li ...>
                    [+] <a ...>
                    [-] <span id="forTab_1">
                        [-] <li ...>
                            [+] <a ...>
                            [-] <span id="forTab_2">
                                [-] <li ...>
                                    [+] <a ...>
                                    [-] <span id="forTab_3">
                                        [-] <a ...>
                                            [+] <strong id="tabOption_tabSet5">

そのため、IE は HTML を正しく解析せず、兄弟のスパン ノードを互いの子孫として扱っているようです (より具体的には、各スパンを前のスパンの li 子の子と見なします)。

これは、開発者ツールの単なる癖ではありません。テスト ツールを使用して、次の xpath を使用して "History" というラベルの付いた 5 番目のタブをクリックしようとしています。

//form[@id="form"]/ul/span/li/a[contains(strong,"History")]

これは firefox と chrome では問題なく動作しますが、IE9 ではノードを見つけることができません。ただし、IE9 でこの xpath を試すと、次のように動作します。

//form[@id="form"]/ul/span/li/span/li/span/li/span/li/span/li/a[contains(strong,"History")]

基本的な HTML の親/兄弟/子ノードの関係を解析する際に IE9 が惨めに失敗する原因は何ですか?

4

0 に答える 0