如何跳过硒网络驱动程序中不存在的定位器



我一页大约有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);
}

最新更新