2013-05-15 77 views
1

我试图使用通配符浏览了硒的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'")); 

似乎不在网络驱动程序工作。

感谢您对此的任何见解。

回答

2

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

XPath Axes

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

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

+1

太好了,非常感谢。我只是添加了我正在寻找的表格属性,并且它非常完美。 // div [contains(text(),'fake')]/ancestor :: table [@ class ='today-group-header'] – JackhammersForWeeks

+0

会这样做,但是没有声望。赞赏不多。 – JackhammersForWeeks

0

只有一个父元素。你可能寻找祖先

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

未工作有语法错误,你申请上的不完全轴距步骤(... /[name(parent::*)谓词查询...,节点或缺少*)。