既存の 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 が惨めに失敗する原因は何ですか?