簡體   English   中英

如何使用硒(JAVA)按列名和行索引自動點擊表格單元格中的鏈接

[英]How to automate click link in table cell by column name and row index using selenium (JAVA)

我想要一種通過提供列名行索引在表格單元格中執行單擊鏈接的通用方法。

可能有多種類型的 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也是可以接受的。

實現這一點的Pseudo codeAlgorithm也是可以接受的。

提前致謝...:)

您可以獲得與目標標題匹配的列的索引,然后返回目標行/列中的鏈接。 我會使用一段 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM