我整天都在解决这个问题,但没有任何结果。我使用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中不起作用。但我找不到任何原因。
什么会导致这种奇怪的硒行为?我该怎么做才能解决问题?
答案 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']
所以从以上定位器开始可以完成什么操作。