TestNG的硒动态查找表列值(TestNg Selenium- Find table column

2019-09-29 05:17发布

正在寻找一种方式来获取列值动态用TestNG和硒。 我有显示类似帐户ID,帐户名称,余额,可用余额帐户详细资料2个表。 表1是储蓄账户和表2是贷款accounts.both表中有余额和可用余额列,但列的位置是不同的。

我想这将接受帐户ID作为参数的单一方法(如:ID2),并返回相应的账户余额? 例如:如果我通过ID2它应该返回500,如果我通过ID4它应该返回500注:余额和可用余额始终是表的最后一栏。

<table id=”savings”>
<thead>
<tr>
<th>id</th>
<th>balance</th>
<th>available balance</th>
</tr>
</thead>
<tbody>
<tr>
<td>id1</td>
<td>100</td>
<td>123</td>
</tr>

<tr>
<td>id2</td>
<td>500</td>
<td>510</td>
</tr>

</tbody>
</table>






<table id=”loan”>
<thead>
<tr>
<th>id</th>
<th>description</th>
<th>nextpayment</th>
<th>balance</th>
<th>available balance</th>
</tr>
</thead>
<tbody>
<tr>
<td>id3</td>
<td>first account</td>
<td>2018-09-21</td>
<td>100</td>
<td>123</td>
</tr>

<tr>
<td>id4</td>
<td>second account</td>
<td>2018-10-25</td>
<td>500</td>
<td>510</td>
</tr>

</tbody>
</table>

Answer 1:

首先,您可以识别使用ID TD和使用id元素,你可以用这种方式,你会得到充分的行了一个独特的ID标识识别父元素。 示例XPath://tr[.//td[contains(text(),'id2')]]/tr //tr[.//td[contains(text(),'id4')]]/tr

采样方法,这将给你的平衡和可用余额:

 // Pass Id value as id1, id2 , id3, or id4
public void finddetailByID(String id)
{
    List <WebElement> tablerows= driver.findElements(By.xpath("//tr[.//td[contains(text(),'"+id+"')]]/td"));
    int rowsize=tablerows.size();
    String availabebalance=tablerows.get(rowsize).getText();
    String balance=tablerows.get(rowsize-1).getText();
} 


Answer 2:

从表中获取的值单元格与ID =“储蓄”

    System.setProperty("webdriver.chrome.driver", "E:\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();

    driver.get("http://somethingURL");
    driver.manage().window().maximize();

    //insert id here
    String id = "id2";

    //define table by id
    WebElement tbl = driver.findElement(By.id("savings"));

    //get row count
    List<WebElement> rows = tbl.findElements(By.tagName("tr"));

    for(int i=0; i<rows.size(); i++) {
        List<WebElement> row = rows.get(i).findElements(By.tagName("td"));
        int columnCount = row.size();
        //check row contain td, not th
        if(columnCount > 0) {
            // 0=index id column from table with id 'savings'
            String getIDFromTable = row.get(0).getText();
            if(getIDFromTable.equals(id)){
                // 1=index balance column from table with id 'savings'
                String getBalance = row.get(1).getText();
                // 2=index available balance column from table with id 'savings'
                String getAvailableBalance = row.get(2).getText();
                System.out.println(getBalance);
                System.out.println(getAvailableBalance);
                break;
            }
        }
    }               
    driver.quit();


Answer 3:

推荐使用XPath而获得列集合。 下面是代码。

public void getBalanceById(String id){
   String balance= driver.findElements(By.xpath("(//td[normalize-space(.)='" + id + ']/ancestor::tr/td)[last()-1]")).gettext();
}


文章来源: TestNg Selenium- Find table column value dynamically