一尘不染

Java Wrapper方法,等待元素可用于Apache Cordova Webview驱动的应用程序

selenium

对于基于多个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;
}

谢谢


阅读 258

收藏
2020-06-26

共1个答案

一尘不染

按照您共享的代码块,我看不到任何附加值来检查 是否 通过
出现了elementimplicitlyWait。该实现看起来像是纯开销。相反,如果你看看 Java文档
ExpectedCondition接口从
org.openqa.selenium.support.ui
包,其中模型预期可能,以评估的东西,不为空也不假还包含一个条件ExpectedConditions类,可以调用WebDriverWait类和
方法 在一个循环中 __提供更详细的方法来确认是否已达到特定条件。 这为我们提供了更多选择 WebElement
所需行为的灵活性。一些广泛使用的方法是:

  • 元素的存在:

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

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

    elementToBeClickable(By locator)
    

注意
:根据文档,请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。

2020-06-26