2011-07-14 97 views
1

我整天都在爲這個問題而戰,但沒有任何結果。我用硒的webdriver,並希望通過XPath來獲得兩個字符串: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打開它。 Firepath向我展示了兩場比賽,所以來源相同。

這一切都讓我覺得這是硒的一些缺陷,因爲我第二次面對這樣的問題。有很多類似問題的主題 - xpath查詢在FF中可用,但在IE中不起作用。但我找不到任何原因。

什麼會引起硒這種奇怪的行爲?我該如何解決這個問題?

回答

0

與單斜線resplaced輸入之前的雙斜線嘗試:

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

可能是XPath不喜歡呢?

+0

是的,你是對的。我添加了第二個斜線,試圖讓XPath工作,並忘記刪除它。但用一個斜槓它也不起作用 –

1

在FF和IE中設置DOM的方式有些不同,特別是使用tbody標記。嘗試從XPath的去除tbody

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

也把input<td>

+0

// tr [@id [contains(。,'US7381548B2')]] /輸入不幸的是它也不起作用。但我認爲我找到了問題的原因。按照標準輸入標籤不能直接放入TR。所以如果我分兩個階段進行XPath解析:1.「//tbody/tr[@id[contains(.,'US7381548B2')]]」2.「//輸入」它解決了問題! –

+0

你不需要兩個階段。上面的單個XPath應該適合您。 –

0

IE8支持document.documentElement.contains(),但不支持document.contains()。

也許這是令人困惑的硒和IE瀏覽器交互。

嘗試將allowNativeXpath()屬性設置爲false。

0

步驟1: 獲取定位器對於2輸入控件

查找器FB_childRec1_0:CSS = .alternate [ID * = '前進']>輸入[ID * = 'FB_childRec']

FB_childRec4_0的定位器:css = .alternate [id * ='BACKWARD']> input [id * ='FB_childRec']

因此,從上述定位器可以完成哪些操作。