对于基于多个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; }
谢谢
按照您共享的代码块,我看不到任何附加值来检查 是否 通过 出现了elementimplicitlyWait。该实现看起来像是纯开销。相反,如果你看看 Java文档 的ExpectedCondition接口从 org.openqa.selenium.support.ui 包,其中模型预期可能,以评估的东西,不为空也不假还包含一个条件ExpectedConditions类,可以调用WebDriverWait类和 方法 在一个循环中 __提供更详细的方法来确认是否已达到特定条件。 这为我们提供了更多选择 WebElement 所需行为的灵活性。一些广泛使用的方法是:
implicitlyWait
元素的存在:
presenceOfElementLocated(By locator)
元素的可见性:
visibilityOfElementLocated(By locator)
元素的交互性:
elementToBeClickable(By locator)
注意 :根据文档,请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。