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

Java Wrapper method for waiting for element to be available for Apache Cordova Webview driven App

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

    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;
}

谢谢

根据您共享的代码块,我没有看到任何附加值来检查 如果元素存在 implicitlyWait。该实现看起来是一种纯粹的开销。相反,如果您查看 ExpectedCondition Interface from the org.openqa.selenium.support.ui package which models a condition that might be expected to evaluate to something that is not null nor false also contains the ExpectedConditions Class that can be called in a loop by the WebDriverWait Class 的 Java 文档 并且 方法 提供了更精细的方法确认是否达到特定条件。这使我们可以更灵活地选择 WebElement 的所需行为。一些广泛使用的方法是:

  • 存在一个元素:

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

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

    elementToBeClickable(By locator)
    

注意 :根据 documentation 不要混合隐式和显式等待。这样做会导致不可预测的等待时间。