当前位置: 首页 > 知识库问答 >
问题:

TestNg Selenium-动态查找表列值

游高杰
2023-03-14

我正在寻找一种使用testng和selenium动态获取列值的方法。我有2个表用于显示帐户详细信息,例如帐户id、帐户名称、余额、可用余额。表1是

我想要一个方法,它将接受帐户id作为参数(例如:id2),

<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>

共有3个答案

郭思淼
2023-03-14

从id为='savings'的表中获取值单元格

    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();
屈星腾
2023-03-14

建议使用xpath而不是获取列集合。这是代码

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

首先,您可以使用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();
} 
 类似资料:
  • 我正在使用MongoDB搜索包含列表列表的元素,其中列表中至少有一个项目与搜索参数匹配。 这是我目前拥有的结构的一个例子。 我想搜索数据列表中值为“绿色”的所有项目。 我目前有这个: 但是,不会返回任何结果。

  • 问题内容: 我希望能够在表的所有列中动态查找特定的关键字。该脚本的目的是仅需更改关键字和表名,而无需知道表的所有列是什么。 这意味着以下代码不是令人满意的解决方案: […]输入“关键字”(字段1,字段2,字段3,字段4,…)[…] 我能够使用子查询动态检索表的所有列名。但是然后,该子查询中的IN语句返回空结果。 然后,我创建了一个新的子查询,该子查询以逗号分隔的列表格式返回列的列表。但是结果也是空

  • 给定一个项目列表,记住列表的模式是最经常出现的项目。 我想知道如何创建一个函数,可以找到列表的模式,但如果列表没有模式(例如,列表中的所有项目只出现一次),它会显示一条消息。我想在不导入任何函数的情况下制作这个函数。我正在尝试从零开始制作自己的函数。

  • 问题内容: 我正在使用下表存储产品数据: 使用以下查询从两个表中选择记录 一切都正常工作:) 因为我动态地填充了“附加”表,所以如果查询也是动态的,那就很好了。这样,我不必每次输入新的字段名和字段值就更改查询。 问题答案: MySQL中动态执行此操作的唯一方法是使用Prepared语句。这是一篇关于它们的好文章: 动态数据透视表(将行转换为列) 您的代码如下所示: 观看演示 注意:GROUP_CO

  • 我想生成jasper报表,用于打印在固定大小的文具上。我创建了html表,并将所有的值放在其中,根据我的要求,现在我想通过Java打印,所以我现在使用了jasper报告,因为我有列,是变化的时间。根据我的要求,我在网上搜索,我得到了动态的jasper是解决方案,但由于方法添加列需要列名和传递变量,这是从setter getter方法,但我的整个列是动态的,那么我如何生成setter getter方

  • 问题内容: 关于你的第一个问题:该代码非常好,并且如果与其中的一个元素相等就可以正常工作。也许你尝试查找与其中一项不完全匹配的字符串,或者你使用的浮点值会导致不准确。 关于第二个问题:如果“查找”列表中的内容,实际上有几种可能的方法。 检查里面是否有东西 这是你描述的用例:检查列表中是否包含某些内容。如你所知,你可以使用in运算符: 过滤集合 即,找到满足特定条件的序列中的所有元素。你可以为此使用