如何跳过 table 行

How to skip a table row

我创建了一个小脚本,它循环并删除 table 中不需要的行,但 table 中有一行无法删除。如何跳过该行并转到下一行?

这是我的脚本:

for(int i=0; i<25; i++){ 

        if(driver.findElement(By.xpath(PvtConstants.READ_ADVERTISRERS_ADVERTISER_IDS)).getText().contains("Skip Me")){
            //what to add here to skip the "Skip Me" text????
        }

        //select the item in the table
        driver.findElement(By.xpath(PvtConstants.READ_ADVERTISRERS_ADVERTISER_IDS)).click();

        //click the delete button
        driver.findElement(By.xpath(".//*[@id='deleteAdv']")).click();

这是专栏的样子。我想跳过RealMedia,然后删除前后所有项目。

HTML:

<table class="table smallInput dataTable" id="dataTableAdvertisers" ">
<thead>
<tr role="row" style="height: 0px;">
<th class="sorting_asc" tabindex="0" "></th>
<th class="sorting" tabindex="0" "></th>
<th class="sorting" tabindex="0" "></th>
</tr>
</thead>
<tbody role="alert" aria-live="polite" aria-relevant="all">
<tr class="odd">
<td class="">
<a href="getadvertiserdetailsNew.do?advertiserKey=198909">RealMedia</a></td>
<td class="">---</td>
<td class="">---</td>
<td class="">---</td>
<td class="">---</td>
</tr><tr class="even">
<td class="">
<a href="getadvertiserdetailsNew.do?advertiserKey=198910">teset2</a></td>
<td class="">---</td>
<td class="">---</td>
<td class="">---</td><td class="">---</td>
</tr><tr class="odd">

</tbody>
</table>

尝试以下操作: 确保在获取列表之前有一些等待(如果需要)。 此元素列表将找到 table 下的所有 a 标签,并且 for 循环遍历集合并删除集合中没有文本匹配的任何成员 RealMedia.您不应该盲目地设置迭代器的上限。这将使程序不必要地循环,这是一种不好的做法。

List<WebElement> elements = driver.findElements(By.cssSelector("#dataTableAdvertisers a"));

for (WebElement element: elements){
    if (!element.getText().contains("RealMedia")){
        //select the item in the table
        driver.findElement(By.xpath(PvtConstants.READ_ADVERTISRERS_ADVERTISER_IDS)).click();

        //click the delete button
        driver.findElement(By.xpath(".//*[@id='deleteAdv']")).click();
    }
}

编辑:

By selector  = By.cssSelector("#dataTableAdvertisers a");
List<WebElement> elements = driver.findElements(selector);

//This just controls the loop. Iterating through the collection will return StaleElement ref exception
for (int i = 0; i<elements.size(); i++){

    //Just want to delete the first item on the list
    By xpath = By.xpath("//table[@id='dataTableAdvertisers']//a[not(.='RealMedia')]");

    if (driver.findElements(xpath).size()>0){
        WebElement element = driver.findElements(xpath).get(0);

        element.click();

        //click the delete button
        driver.findElement(By.xpath(".//*[@id='deleteAdv']")).click();
    }
}