代码之家  ›  专栏  ›  技术社区  ›  Gaurav Thantry

从异常处理程序获取找不到元素的异常

  •  0
  • Gaurav Thantry  · 技术社区  · 7 年前

    在尝试在try循环中定位元素时,我正在获取“找不到元素”异常。以下是我的代码:

    private  boolean isPresent(WebDriver driver,String findElement)
      {
    	  driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    	  try {
    		  driver.findElement(By.xpath(findElement));
    		  return true;
    	  }
    	  catch (NoSuchElementException e) {
    		  return false;
    	  }
         finally{
         driver.manage().timeouts().implicitlyWait(40,TimeUnit.SECONDS);
       }
      }
    2 回复  |  直到 7 年前
        1
  •  -1
  •   JeffC    7 年前

    更好的方法是避免首先抛出异常。

    private boolean isPresent(WebDriver driver, By locator)
    {
        return !driver.findElements(locator).isEmpty();
    }
    

    不要将定位器作为字符串传递并需要xpath,而是使用 By 定位器。现在您可以将该方法传递给任何定位器类型…ID、CSS选择器等。

        2
  •  2
  •   PJAutomator    7 年前

    不要使用find元素和超时,而是使用一些等待或直到元素出现,然后执行操作。 这将等待元素被定位,然后用MyDynamicElement做你想做的事情。

    WebElement myDynamicElement = (new WebDriverWait(driver, 10))
      .until(ExpectedConditions.presenceOfElementLocated(By.id("myElement")));
    

    看起来您正在尝试验证元素是否存在。为此,使用类似这样的逻辑。 a)内部试验 1)等待元素出现 2)然后使用if-then-else检查元素是否存在并返回true或false b)内部捕捉处理错误。