代码之家  ›  专栏  ›  技术社区  ›  user2451016

用于等待元素可用于Apache Cordova Webview驱动的应用程序的Java包装器方法

  •  1
  • user2451016  · 技术社区  · 6 年前

    对于多个基于Webview的移动应用程序(使用Cordova、PhoneGap、XCode构建的iOS应用程序),我创建了以下方法来检查元素是否存在。请建议以下片段是否有意义?由于基于传统显式等待的传统包装函数不能可靠地工作。

        public boolean waitForElemToBeAvailable(final By by, final int timeout, int retries) {
        WebDriverWait wait = new WebDriverWait(appiumDriver, timeout);
        boolean success = false;
        final long waitSlice = timeout/retries;
    
        if(retries>0){
            List<WebElement> elements = appiumDriver.findElements(by);
            if(elements.size()>0){
                success = true;
                return success;
            }else {
                appiumDriver.manage().timeouts().implicitlyWait(waitSlice, TimeUnit.SECONDS);
                retries--;
            }
        }
        return success;
    }
    

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   undetected Selenium    6 年前

    根据您共享的代码块,我看不到要检查的任何附加值 如果存在元素 通过 implicitlyWait 。实现看起来是一种纯粹的开销。相反,如果你调查 Java文档 属于 ExpectedCondition 来自的接口 组织。openqa。硒。支持用户界面 对一个条件进行建模的包,该条件的计算结果可能不是null或false,该包还包含 ExpectedConditions 类可以在循环中由 WebDriverWait 类和 方法 提供更精细的方法来确认是否达到特定条件。这使我们在选择 Web元素 .一些广泛使用的方法包括:

    • 元素的存在:

      presenceOfElementLocated(By locator)
      
    • 元素的可见性:

      visibilityOfElementLocated(By locator)
      
    • 元素的可交互性:

      elementToBeClickable(By locator)
      

    笔记 :根据 documentation 不要混合使用隐式和显式等待。这样做可能会导致无法预测的等待时间。