2011-07-14 7 views
1

私はこの問題をいつでも解決していますが、結果は一切ありません。私はセレンwebdriverをを使用するとXPathで2つの文字列を取得したい:IEでのXPathクエリの問題

<input id="FB_childRec1_0" type="hidden" value="child12_0,child22_0,child13_0,child23_0,child14_0,child24_0" size="1"/> 

<input id="FB_childRec4_0" type="hidden" value="child15_0,child25_0,child16_0,child26_0,child17_0,child27_0,child18_0,child28_0,child19_0" size="1"/> 

このコードから:

<tbody> 
    <input id="cidChild1_0" type="hidden" value="T3$PATENT$US7381548B220080603"/> 
    <input id="cidChild1_0" type="hidden" value="T3$PATENT$US7381548B220080603"/> 
    <tr id="FORWARD_1US7381548B220080603_0" class="alternate" style="" name="childTR"> 
     <td class="tborder leftAlignment" rowspan="1" style="width:1%"> 
     <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%"> 
     <input id="FB_childRec1_0" type="hidden" value="child12_0,child22_0,child13_0,child23_0,child14_0,child24_0" size="1"/> 
     <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%"> 
     <td class="frmData tborder vTop" align="left" rowspan="1" colspan="5">Forward Citation - (Displaying 3 forward citations)</td> 
    </tr> 
    <input id="cidChild4_0" type="hidden" value="T3$PATENT$US7381548B220080603"/> 
    <tr id="BACKWARD_4US7381548B220080603_0" class="alternate" style="" name="childTR"> 
     <td class="tborder leftAlignment" rowspan="1" style="width:1%"> 
     <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%"> 
     <input id="FB_childRec4_0" type="hidden" value="child15_0,child25_0,child16_0,child26_0,child17_0,child27_0,child18_0,child28_0,child19_0" size="1"/> 
     <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%"> 
     <td class="frmData tborder vTop" align="left" rowspan="1" colspan="5">Backward Citation - (Displaying 14 backward citations)</td> 
    </tr> 
</tbody> 

私は、このようなXPathクエリを使用します。//tbody/tr[@id[contains(.,'US7381548B2')]]//input

コード内には:

driver.FindElements(By.XPath("//tbody/tr[@id[contains(.,'" + queryArray[i] + "')]]//input")); 

すべては、Firefoxで完璧に動作し、私は2つの要素を得ることができます。しかし、IE FindElements()では何も見つかりません。私はIE8とIE9でこれを試しましたが、何の結果もありませんでした。 Selenium WebDriverを2.0.0にアップデートしましたが、それは役に立ちません。それでは、アプリケーションがFFとIEのための異なるソースを提供するかもしれないと思う。だから私はIEからページを保存し、FFでそれを開きます。ファイアパスは私に2つの試合を見せるので、出所は同じです。

これはセレンのバグだと私は考えています。なぜなら、私はこの種の問題に2度目に直面するからです。同様の問題を抱えるトピックがたくさんあります.xpathクエリはFFでは動作しますが、IEでは動作しません。しかし、私はこれの原因を見つけることができません。

このような奇妙な行動を起こす原因は何ですか?問題を解決するにはどうすればよいですか?

答えて

0

は、単一のスラッシュでresplaced入力する前にダブルスラッシュでそれを試してみてください。

//tbody/tr[@id[contains(.,'US7381548B2')]]/input 

は、XPathがそれを好きではないだろうか?

+0

はい、あなたは正しいです。私は、XPathを動作させようとする第二のスラッシュを追加し、それを削除するのを忘れてしまった。しかし、単一のスラッシュでも動作しません。 –

1

特にtbodyタグを使用して、FFとIEでDOMを設定する方法にはいくつかの違いがあります。 XPathのからtbodyを削除してください:

//tr[@id[contains(.,'US7381548B2')]]//input 

<td>inputを置きます。

+0

// tr [@id(contains(。、 'US7381548B2')]] /残念ながらそれはまた動作しません。しかし、私は問題の原因を見つけたと思う。標準的な入力タグに従ってTRに直接入れることはできません。 XPathを2段階で解析すると、次のようになります。1. "/tbody/tr[@id[contains(.US.7381548B2 ')]]" 2. "Input"問題を解決します。 –

+0

2段階は必要ありません。上の1つのXPathはあなたのために働くはずです。 –

0

IE8はdocument.documentElement.contains()をサポートしますが、document.contains()はサポートしていません。

多分、これはセレンとIEの相互作用に紛らわしいかもしれません。

allowNativeXpath()プロパティをfalseに設定してみてください。

0

ステップ1: 2入力FB_childRec1_0ため

ロケータコントロールのロケータを取得:CSS = .alternateを[ 'FORWARD' ID * =]>入力[ID * = 'FB_childRec']

FB_childRec4_0のロケータ:css = .alternate [id * = 'BACKWARD']>入力[id * = 'FB_childRec']

これまでの操作は何でもできます。