在我的脚本(selenium& Java)中,我需要通过它的标题选择一个表列。 基本上,我将标头作为参数发送,然后只需获取该列。
但是,问题是我无法获得标题列的索引。 有什么想法或建议吗?
<table class="table table-hover tablesorter ib-table" data-reactid=".0.0.0.1.2.0">
<thead data-reactid=".0.0.0.1.2.0.0">
<tr data-reactid=".0.0.0.1.2.0.0.0">
<th data-reactid=".0.0.0.1.2.0.0.0.0">ID</th>
<th data-reactid=".0.0.0.1.2.0.0.0.1">To</th>
<th data-reactid=".0.0.0.1.2.0.0.0.2">From</th>
<th data-reactid=".0.0.0.1.2.0.0.0.3">Text</th>
</tr>
</thead>
<tbody data-reactid=".0.0.0.1.2.0.1" style="height: auto;">
<tr data-reactid=".0.0.0.1.2.0.1.$0">
<td data-reactid=".0.0.0.1.2.0.1.$0.0">123456</td>
<td data-reactid=".0.0.0.1.2.0.1.$0.1">+0156477889785</td>
<td data-reactid=".0.0.0.1.2.0.1.$0.2">+0156477889784</td>
<td data-reactid=".0.0.0.1.2.0.1.$0.3">sample textM</td>
</tr>
<tr data-reactid=".0.0.0.1.2.0.1.$1">
<tr data-reactid=".0.0.0.1.2.0.1.$2">
答案 0 :(得分:0)
首先,您需要通过
执行包含所有标题的ListList<WebElement> headersList = driver.findElement(By.xpath("//table[@class='table-hover tablesorter ib-table']")).findElements(By.tagName("th"));
之后你将把所有tr放在循环中
List<WebElement> trList = driver.findElement(By.xpath("//table[@class='table-hover tablesorter ib-table']")).findElements(By.tagName("tr"));
List<WebElement> tdList;
for(int = i ; i < trList.Count ; i++)
{
tdList = trList[i].findElements(By.tagName("td"));
//tdList[0] its header in index[0]... and so on...
}
答案 1 :(得分:0)
这在奇怪的情况下不起作用,例如使用colspan时。它适用于任何&#34;正常&#34;数据表。修剪用于避免出现在许多WebElements周围出现的不可避免的空白。
public static List<WebElement> getColumnByHeaderText(WebDriver driver, By by, String header) {
WebElement table = driver.findElement(by);
Function<WebElement, String> elementToString = (WebElement w) -> w.getText().trim();
List<WebElement> list = table.findElements(By.tagName("th"));
int index = Lists.transform(list, elementToString).indexOf(header);
if (index == -1) {
throw new RuntimeException("Unable to locate header");
} else {
return table.findElements(By.cssSelector("td:nth-child(" + (index + 1 ) + ")"));
}
}