我使用Selenium和Java,我需要为表编写一个选择器,我需要找到确切的列并右键单击它。问题是使用lstype查找列很简单,因为它们都有不同的值,但是不能右键单击它。因此,我需要点击它下方的框。
这大致与表格类似: Table
这大概就是html的样子:
<div class="head">
<table>
<tbody>
<tr>
<td class="game" lstype="124"></td>
<td class="game" lstype="245"></td>
<td class="game" lstype="873"></td>
</tr>
</tbody>
</table>
</div>
<div class="body">
<table id="extractBody">
<tbody>
<tr>
<td class="game"></td>
<td class="game"></td>
<td class="game"></td>
</tr>
</tbody>
</table>
</div>
第一部分中的每个td都指向标题框(绿色),第二部分中的每个td都是我可以实际点击的元素。
我不知道如何根据标题框中的lstype获取以下框。 我发布它只有3列,但实际上还有更多。与行相同。
我将不胜感激任何帮助。我想它应该用xpaths完成,但我尝试过的任何东西都没有用。
谢谢!
答案 0 :(得分:2)
所以我假设您可以先使用一些xpath选择行。由于您没有显示有关行的任何信息,我认为它已整理出来。然后在行对象上我将使用下面的XPath
.//table[@id='extractBody']//tr/td[count(//td[@lstype='124']/preceding-sibling::td) + 1]
这种方式的工作方式是xpath
count(//td[@lstype='124']/preceding-sibling::td) + 1
当前节点之前的TD元素计数,因此如果您的节点是第二个节点,则给出1,然后我们将其添加1以获取我们的列号。然后我们使用
.//table[@id='extractBody']//tr/td[desiredcount]
要获取该索引上的元素,然后您可以单击它
答案 1 :(得分:0)
你有两种方法:1使用这个插件mozzila plugin,它会记录所有动作,点击和事件,然后,当你完成后,你可以选择以你想要的方式导出它,例如在java类上。
另一种方法是简单地在body元素的每个复选框上放置一些唯一标识符,调用它并且可以完成,通过使用xpath很复杂但是你发现其他2个选项失败,你必须应用xpath。
答案 2 :(得分:0)
我想说最简单的方法是用类游戏找到所有的td元素
List<WebElement> foo = webDriver.findElements(By.cssSelector("td.game");
然后遍历元素直到找到所需的元素,并将该索引添加到整个列表的一半大小,然后单击该元素
int count =0;
for(WebElement ele: foo){
if (ele.getAttribute("lstype").equals({searchTerm}) {
foo.get(count+(foo.size()/2)).click()
}
count++
}
这显然假设两个表中都有相同数量的元素