我正在尝试使用通配符在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'"));
似乎无法在网络驱动程序中使用。
感谢您对此有任何见解。
答案 0 :(得分:2)
如果我理解你的问题,你想要的是祖先而不是父母。
ancestor:选择当前节点父节点的所有祖先(父节点,祖父节点等) parent:选择当前节点的父节点
对表祖先
尝试//div[text()='title']/ancestor::table
答案 1 :(得分:0)
只有一个父元素。您可能正在寻找祖先:
//div[contains(text(),'div_text')]/ancestor::*
不起作用的查询存在语法错误,您在不完整的序列步骤中应用谓词(... /[name(parent::*)
...,节点或*
丢失了)