gpt4 book ai didi

java - 如何使用 Selenium (JAVA)按列名和行索引自动点击表格单元格中的链接

转载 作者:行者123 更新时间:2023-11-30 08:36:50 25 4
gpt4 key购买 nike

我想要一种通用方法,通过提供列名行索引 在表格单元格中执行点击链接。

可能有多种类型的 HTML 表格结构,但我需要在每个看起来像通用 HTML 表格的表格中执行操作的通用函数。

例如。以下是一些通用表的定义:-

1- 第一个表结构

 <table>
<tr>
<th>column1</th><th>column2</th><th>column3</th>
</tr>
<tr>
<td><a href="">Link1</a></td><td><a href="">Link2</a></td><td><a href="">Link2</a></td>
</tr>
</table>

2- 第二表结构

 <table>
<tr>
<td>column1</td><th>column2</th><td>column3</td>
</tr>
<tr>
<td><a href="">Link1</a></td><th><a href="">Link2</a></th><td><a href="">Link2</a></td>
</tr>
</table>

3- 第三表结构

 <table>
<tr>
<td>column1</td><td>column2</td><td>column3</td>
</tr>
<tr>
<td><a href="">Link1</a></td><td><a href="">Link2</a></td><td><a href="">Link2</a></td>
</tr>
</table>

这里如果我为例如提供两个参数。

String columnName = "column2", int rowIndex = 1;

然后我的通用函数在所有表格的 2,1 处的表格单元格中执行点击链接 Link2

我可以使用 WebDriver 找到表格,如下所示:-

 WebDriverWait wait = new WebDriverWait(driver, 10000);
WebElement tableElment = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//table")));

但我不知道如何创建一个通用函数来按我的意愿处理这个表。

请帮助我在 Java 中创建一个通用函数来完成此任务。

WebDriver 中使用 JavascriptExecutor 也是可以接受的..

伪代码算法来实现这个也是可以接受的..

提前致谢...:)

最佳答案

您可以获得与目标标题匹配的列的索引,然后返回目标行/列中的链接。我将使用一段 JavaScript 来完成这项任务:

static WebElement getTableLink(WebElement table, String column, int row) {
JavascriptExecutor js = (JavascriptExecutor)((RemoteWebElement)table).getWrappedDriver();

WebElement link = (WebElement)js.executeScript(
"var rows = arguments[0].rows, header = arguments[1], iRow = arguments[2]; " +
"var iCol = [].findIndex.call(rows[0].cells, (td) => td.textContent == header); " +
"return rows[iRow].cells[iCol].querySelector('a'); " ,
table, column, row);

return link;
}

用法:

// get the table
WebElement tableElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("table")));

// click the link in column "column2", row 1
getTableLink(tableElement, "column2", 1).click();

关于java - 如何使用 Selenium (JAVA)按列名和行索引自动点击表格单元格中的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37561317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com