鉴于我有以下XPath:
//table[@title="someTitle"]//td[@id="someId"][3]
当我尝试使用WebDriver的元素(By.xpath(someXpathString))单击此元素时。单击();我得到了" ElementNotFound"异常。
但是,当我尝试使用SAME XPath查找元素但在Chrome DevTools中使用控制台时,它会返回我正在寻找的元素。电话看起来像这样:
$x('//table[@title="someTitle"]//td[@id="someId"][3]');
现在,我知道如果我使用这个XPath:
(//table[@title="someTitle"]//td[@id="someId"])[3]
在WebDriver中,找到该元素并单击“无效”。
我的问题是:为什么Chrome控制台使用XPath 不带括号识别元素,而Find函数则没有,两个XPath之间的实际区别是什么?
我注意到在其他元素上不需要括号表示法来选择该类型的第二个或更高的元素,所以我想清楚解释这种类型的XPath如何工作,什么是背后的逻辑。
答案 0 :(得分:2)
两个xpath都不同。
//table[@title="someTitle"]//td[@id="someId"][3]
- 将只选择3个列元素(//table[@title="someTitle"]//td[@id="someId"])[3]
- 选择所有列,然后只返回一个索引为3的元素。例如假设一个包含4行和4列的表。 第一个xpath仅选择每行第三列中的元素(总共4个)。 但是第二个xpath只选择一个元素,即第1行的第3列,而不管表中的行数。
如果我们使用find元素,两者都只返回一个元素。但是如果我们使用find元素,首先会返回4个元素,但是第二个xpath只返回一个元素。
答案 1 :(得分:0)
如果您要从其他页面转到元素所在的页面,请尝试刷新 -
driver.navigate().refresh();