如何跳过表格行

时间:2015-02-07 16:38:50

标签: java selenium selenium-webdriver

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

这是我的剧本:

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,然后删除之前和之后的所有项目。

enter image description here

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>

1 个答案:

答案 0 :(得分:1)

尝试以下方法: 在获取列表之前确保有一些等待(如果需要)。 此元素列表将查找该表下的所有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();
    }
}