在selenium web驱动程序中使用parent :: *轴时出现问题

时间:2013-05-15 22:56:54

标签: java xpath selenium webdriver

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

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

尝试获取具有&#39; div_text&#39;的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 个答案:

答案 0 :(得分:2)

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

  

XPath Axes

     

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

对表祖先

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

答案 1 :(得分:0)

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

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

不起作用的查询存在语法错误,您在不完整的序列步骤中应用谓词(... /[name(parent::*) ...,节点或*丢失了)