从 webTable 打印特定列值

Printing specific column value from a webTable

我正在尝试根据参数打印 table 中的所有列值。如果参数匹配,则应打印所有列值。这在我下面的代码中没有发生。


public class DynamicTableHandling extends DriverFactory {

  static String company = "ABB India Ltd.";

  public static void main(String[] args) {

    init_driver("chrome");
    driver.get("https://money.rediff.com/sectors/bse/power");
    extractTableValues(company);
}

public static void extractTableValues(String company) {
  //print all the column values from the table when the company name provided has matched//
    
 List<WebElement> tableRow = driver.findElements(By.xpath("//table[@class='dataTable']/tbody/tr"));

    for (int row = 0; row < tableRow.size(); row++) {

        WebElement colData = tableRow.get(row);

        List<WebElement> tableCol = colData.findElements(By.tagName("td"));

        for (int col = 0; col < tableCol.size(); col++) {
            String result = tableCol.get(col).getText();

            if (company.equals(result.trim())) {
                System.out.print(result + " | ");
                break;
            }
        }
    }

}

}

产出 -- ABB 印度有限公司 |

您当前使用的方法 extractTableValues 的复杂度为 O(n^2)。您可以通过制作动态 xpath 来显着优化以获得 O(n)

您的有效代码:

public static void extractTableValues(String company) {
    List<WebElement> tds = driver.findElements(By.xpath("//a[contains(.,'"+company+"')]//ancestor::tr//td"));
    for (WebElement td : tds) {
        System.out.println(td.getAttribute("innerText"));
    }
}

输出:

ABB India Ltd.
A
2090.10
2084.35
+5.75
+0.28

或使用Java 1.8:

public static void extractTableValues(String company) {
    List<WebElement> tds = driver.findElements(By.xpath("//a[contains(.,'"+company+"')]//ancestor::tr//td"));
    tds.stream().forEach(td -> {System.out.println(td.getText());});
}