我创建了一个小脚本,它循环并删除表中不需要的行,但表中有一行无法删除。如何跳过该行并转到下一行呢?
这是我的剧本:
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>
答案 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();
}
}