迭代表行,然后单击行内的按钮/链接

时间:2019-08-21 02:14:25

标签: java selenium

我有这张桌子,每一行都有一个链接来执行功能。使用我拥有的代码,它单击了第一行,而我想要实现的是查找item是否等于该行中的项目,并在找到该行后单击按钮。这是示例:

    WebElement baseTable = driver.findElement(By.xpath("//table[@id='materials']"));
    List<WebElement> materialsRow = baseTable.findElements(material_table_tr);
    List<WebElement> clickAction = driver.findElements(material_first_column);


    try {
        for (int i = 0; i < materialsRow.size(); i++) {
            String name = materialsRow.get(i).getText();
            Thread.sleep(500);
            if (name.contains(item)) {
                clickAction .get(i).click();
            } else
                throw new Exception("Invalid Selection");
        }
    } catch (Exception e) {
        e.getMessage();
    }

预期: item =台北101

名称项目相同的行中查找。如果找到,请单击行中的按钮。

实际: 上面的代码仅单击第一行。

Please see image

HTML:

<tbody>
<tr>
    <th scope="row">Burj Khalifa</th>
    <td>UAE</td>
    <td>Dubai</td>
    <td>829m</td>
    <td>2010</td>
    <td>1</td>
    <td><a href="#">details</a></td>
</tr>
<tr class="odd">
    <th scope="row">Clock Tower Hotel</th>
    <td>Saudi Arabia</td>
    <td>Mecca</td>
    <td>601m</td>
    <td>2012</td>
    <td>2</td>
    <td><a href="#">details</a></td>
</tr>
<tr>
    <th scope="row">Taipei 101</th>
    <td>Taiwan</td>
    <td>Taipei</td>
    <td>509m</td>
    <td>2004</td>
    <td>3</td>
    <td><a href="#">details</a></td>
</tr>
<tr class="odd">
    <th scope="row">Financial Center</th>
    <td>China</td>
    <td>Shanghai</td>
    <td>492m</td>
    <td>2008</td>
    <td>4</td>
    <td><a href="#">details</a></td>
</tr>

2 个答案:

答案 0 :(得分:0)

您可以将代码更改为

   boolean found = false;
   for (int i = 0; i < materialsRow.size(); i++) {
       String name = materialsRow.get(i).getText();
       Thread.sleep(500);
       if (name.contains(item)) {
           clickAction .get(i).click();
           found = true;
           break;  // do not need to look anymore
        } 
   }

   if (!found) throw new Exception ("not found");

答案 1 :(得分:0)

我只是使用下面的xpath而不是循环。

//table//tr[th[.='Taipei 101']]/td/a

截屏:

enter image description here

这是代码的点击行。

driver.findElement(By.xpath("//table//tr[th[.='Taipei 101']]/td/a")).click();
// generic line of code using item
driver.findElement(By.xpath("//table//tr[th[.='" + item +"']]/td/a")).click();

如果要检查然后单击,可以使用以下逻辑。

    List<WebElement> items =driver.findElements(By.xpath("//table//tr[th[.='" + item +"']]/td/a"));
    if items.size()>0{
       // click on the item
       items.get(0).click();
    }else{
     // write your logic here when item not exist
    }