1

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

谢谢

4

1 回答 1

1

根据您共享的代码块,我看不到任何附加值来检查元素是否存在implicitlyWait. 该实现看起来是纯粹的开销。相反,如果您从org.openqa.selenium.support.ui包中查看ExpectedCondition接口的Java 文档,该包对可能预期评估为非 null 或 false 的条件进行建模,还包含可以调用的ExpectedConditions类在WebDriverWait类和方法的循环中提供更精细的方法来确认特定条件是否已实现。这使我们在选择所需的WebElement行为时更加灵活。一些广泛使用的方法是:

  • 元素的存在:

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

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

    elementToBeClickable(By locator)
    

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

于 2018-04-10T11:33:48.210 回答