1

我正在尝试使用通配符在 selenium 中向上导航 DOM,使用类似这样的东西......

    ArrayList<WebElement> list = (ArrayList<WebElement>) driver.findElements(By.xpath("//div[contains(text(),'div_text')]/parent::*]"));

尝试获取具有“div_text”的 div 的所有父元素。这似乎只返回直接父母,而不是所有父母。我需要在 DOM 上增加可变数量的节点。

获得列表后,我计划使用

for(WebElement e: list)
   if(e.getTagName().equals("table") && e.getAttribute("class").equals("blah")
       e.click();

同意这不是最有效的方法,而是更复杂的 xpath 表达式,例如

driver.findElements(By.xpath("//div[text()='title']/[name(parent::*) = 'table'"));

似乎在网络驱动程序中不起作用。

感谢您对此的任何见解。

4

2 回答 2

2

如果我正确理解了您的问题,那么您想要的是祖先而不是父母。

XPath 轴

祖先:选择当前节点的所有祖先(父、祖父母等) parent
parent:选择当前节点的父节点

尝试//div[text()='title']/ancestor::table表祖先

于 2013-05-15T23:32:22.727 回答
0

只有一个父元素。您可能正在寻找祖先

//div[contains(text(),'div_text')]/ancestor::*

不工作的查询有语法错误,您正在对不完整的轴步骤应用谓词(... /[name(parent::*),节点或 a*丢失)。

于 2013-05-15T23:32:56.340 回答