我一页大约有50行。但这些项目是按顺序排列的。
问题是当有人输入并删除该表行时。该 id 不会出现在页面中。
例:
User added 1st record: id 101 added.
User added 2nd record: id 102 added
User added 3rd record: id 103 added.
如果用户删除第二条记录,则页面上将有两条记录,但 ID 为 101、103。
我正在尝试编写如果该 id 存在,则获取文本,否则将其保留在 for 循环中。我只得到记录,直到找到它,如果没有找到该 id,就会显示NoSuchElementException
。
请更正代码。但是我想要的解决方案是,如果该ID不存在,请跳过并运行else部分。
for (int i = counterstart; i <= counterend; i++) {
if(driver.findElement(By.xpath("//*[@id='" + i + "']/a")).isDisplayed()){
System.out.println(i+" is present");
String Projects = driver.findElement(By.xpath("//*[@id='" + i + "']/a")).getText();
System.out.println(Projects);
} else{
System.out.println(i+" is NOT present");
}
}
我得到的例外:
线程"main"org.openqa.selenium.NoSuchElementException中的异常:找不到具有 xpath ==//*[@id='7593']/a 的元素(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:503 毫秒
试试这个方法 isPresent 而不是 isDisplay。
public boolean isPresent(WebElement e) {
boolean flag = true;
try {
e.isDisplayed();
flag = true;
}
catch (Exception e) {
flag = false;
}
return flag;
}
How about this:
for (int i = counterstart; i <= counterend; i++) {
WebElement element;
try{
element = driver.findElement(By.xpath("//*[@id='" + i + "']/a"));
}catch(NoSuchElementException n)
{
element = null;
}
if(element !=null){
System.out.println(i+" is present");
String Projects = driver.findElement(By.xpath("//*[@id='" + i + "']/a")).getText();
System.out.println(Projects);
}else{
System.out.println(i+" is NOT present");
}
}
找到要从中获取文本的所有元素的所有父元素,并使用它来向下钻取,这样您就不会得到异常
假设 html 看起来像这样
<div id="parent">
<div id="11">
<a>text</a>
</div>
<div id="12">
<a>text</a>
</div>
<div id="13">
<a>text</a>
</div>
</div>
你可以这样做
// get all the elements with id
List<WebElement> ids = driver.findElements(By.cssSelector("#parent > div"));
// get all the texts using the id elements
for (WebElement id :ids) {
String projects = id.findElement(By.tagName("a")).getText();
System.out.println(projects);
}