需要对过滤器图标编码的建议

Need suggestion to code for filter icon

我需要在 selenium 网络驱动器 java 中编写以下代码。我正在使用 java 日食。我试图找到过滤器菜单的元素。单击过滤器图标后,将显示过滤器菜单。当我尝试通过使用 firebug 单击过滤器图标来查找元素时,下面的代码突出显示 span class="k-icon k-filter xpath 也不起作用。

<th class="k-header k-filterable k-with-icon" scope="col" data-title="Package Detail" data-index="0" data-field="PackageDetail.Namee" data-role="columnsorter">
 <a class="k-grid-filter" href="javascript:void(0)" tabindex="-1">
  <span class="k-icon k-filter"/>
 </a>
 <a class="k-link" href="/Valiadationrule/GetData?ValiadationruleGrid-sort=PackageDetail.Namee-asc">Package Detail</a>
</th>

<th class="k-header k-filterable k-with-icon" scope="col" data-title="Category" data-index="1" data-field="Category" data-role="columnsorter">
 <a class="k-grid-filter" href="javascript:void(0)" tabindex="-1">
  <span class="k-icon k-filter"/>
</a>
<a class="k-link" href="/Valiadationrule/GetData?ValiadationruleGrid-sort=Category-asc">Category</a>
</th>

<th class="k-header k-filterable k-with-icon" scope="col" data-title="Name" data-index="2" data-field="Name" data-role="columnsorter">
 <a class="k-grid-filter" href="javascript:void(0)" tabindex="-1">
   <span class="k-icon k-filter"/>
 </a>
 <a class="k-link" href="/Valiadationrule/GetData?ValiadationruleGrid-sort=Name-asc">Name</a>
</th>

尝试以下任一 Java 代码点击第一个过滤器图标 "Package Detail":

//a[.='Package Detail']

它将 select 带有标签 a 且精确 innerHTML/text 的元素作为 Package Detail

//a[contains(@href,'PackageDetail')]

它将 select 带有标签 a 和包含文本 PackageDetail.

href 属性的元素

编辑

根据最新的图片,我已经弄清楚问题出在哪里了。实际上,整个网格都在一个 id 为 bodyframe 的框架内。因此,您必须先切换到框架,然后再单击过滤器图标。

1- 切换到框架:

driver.switchTo().frame("bodyframe");

2- 单击过滤器图标:

driver.findElement(By.xpath("//a[contains(@href,'PackageDetail')]/preceding-sibling::a")).click();

driver.findElement(By.xpath("//th[@data-title='Package Detail']//span[@class='k-icon k-filter']/..")).click();

 driver.findElement(By.xpath("//th[@data-title='Package Detail']//span[@class='k-icon k-filter']")).click();