如何跳过 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();
}
}
我创建了一个小脚本,它循环并删除 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();
}
}