【发布时间】:2018-05-16 02:49:51
【问题描述】:
<div class=”ag-cell-label-container ag-header-cell-sorted-none” role=”presentation”
<span ref=”eMENU” class=”ag-header-icon ag-header-cell-menu-button” aria-hidden=”true” style=”transition:opacity 0.2s;>
<span class=”ag-icon ag-icon-menu”></span>
</span>
<div ref=”eLabel” class=”ag-header-cell-label” role=”presentation”>
<span ref=”eText” class=”ag-header-cell-text role=”columnheader”> Product</span>
我需要在我的应用程序中单击ag-icon ag-icon menu 以获得产品列。
我写了下面的 xpath 来做同样的事情。但是有超过 1 个元素与兄弟中给出的 xpath 匹配,这就是我将出现硬编码为 [1] 的原因。有没有办法在不使用参考的情况下点击ag-icon ag-icon menu?
WebElement pipeline = driver.findElement(By.xpath("//span[text()='Product']"));
WebElement parent = pipeline.findElement(By.xpath(".."));
WebElement sibling = parent.findElement(By.xpath("(//preceding-sibling::span[@class='g-header-icon ag-header-cell-menu-button']/span)[1]"));
sibling.click();
【问题讨论】:
-
你想选择什么
-
第一类是
ag-header-icon,而不是g-header-icon。你错过了a。 -
目前还不清楚要点击哪个元素。
-
路径
//preceding-sibling::span是毫无意义的——它会选择文档中的每个span,它是某个东西的前一个兄弟。我怀疑前面的“//”是作为魔法仙尘添加的,应该去掉。 -
你需要提供一些匹配的节点才能得到好的答案。
标签: java selenium selenium-webdriver xpath