显示等待中的异常捕获

andyclock 发布于 2016/02/17 17:12
阅读 354
收藏 0

测试过程中想实现如下步骤,系统在登录后会加载一些元素,加载成功后继续其它操作,如果加载失败则关闭浏览器重开系统

public static boolean isElementExsit(By locator) throws InterruptedException {  
        try {
         Thread.sleep(30000);
         driver.findElement(locator);
         return true;
         } catch (NoSuchElementException e) { 
            System.out.println("Welcome Element is not exsit!"); 
            return false;
          } 
        }

用以上方法可以通过返回值来判断异常,从而执行退出浏览器等动作,但我希望用显示等待来实现这个步骤,上面的代码无论是否找到元素都必须等待设置的时间,效率比较低。

   public static boolean isElementExsit(By locator) throws InterruptedException {  
        try {
            new WebDriverWait(driver, 30).until(ExpectedConditions.presenceOfElementLocated(locator));
         return true;
         } catch (NoSuchElementException e) { 
            System.out.println("Welcome Element is not exsit!"); 
            return false;
          } 
          }

如果直接加入显示等待代码,这样异常就会直接打印在控制台,不会被捕捉到并返回false,想问下有什么好的方法来实现这个步骤?

加载中
0
张玉明
public boolean hasElement(String locator, int time) {
        LOGGER.info("find element[" + locator + "]  in the page  time : "
                + time);

        while ((time = time - 500) > 0) {

            try {
                Sync();
                driver.findElement(SeleniumUtil.getLocator(locator));
                LOGGER.info("Found element : " + locator);
                return true;
            } catch (Exception e) {
                LOGGER.info("Not found element[" + locator + "] , less time : "
                        + time);
                pause(500);
            }

        }

        LOGGER.info("The element [" + locator + "] is not found");

        return false;
    }
a
andyclock
Hi,你好,感谢回复,想问下这段代码中的Sync(); SeleniumUtil和pause()是不是需要自定义的方法或类?
0
1
1578353911
是你java代码问题,你只捕捉NoSuchElementException,try中如果找不到元素会抛出TimeoutException,看下util方法源码,你捕捉这个异常就可以,或者直接捕捉Exception
返回顶部
顶部