IE中的XPath查询问题

时间:2011-07-14 13:33:04

标签: internet-explorer xpath selenium webdriver qa

我整天都在解决这个问题,但没有任何结果。我使用selenium webdriver并希望通过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中不起作用。但我找不到任何原因。

什么会导致这种奇怪的硒行为?我该怎么做才能解决问题?

4 个答案:

答案 0 :(得分:1)

在FF和IE中如何设置DOM存在一些差异,特别是对于tbody标记。尝试从XPath中删除tbody

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

另外,将input放入<td>

答案 1 :(得分:0)

在输入用一个斜杠替换之前用双斜杠尝试:

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

可能是XPath不喜欢它吗?

答案 2 :(得分:0)

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

对于selenium和IE的交互,这可能会让人感到困惑。

尝试将allowNativeXpath()属性设置为false。

答案 3 :(得分:0)

第1步: 获取2个输入控件的定位器

FB_childRec1_0的定位器:css = .alternate [id * ='FORWARD']&gt;输入[ID * = 'FB_childRec']

FB_childRec4_0的定位器:css = .alternate [id * ='BACKWARD']&gt;输入[ID * = 'FB_childRec']

所以从以上定位器开始可以完成什么操作。