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 不要混合隐式和显式等待。这样做会导致不可预测的等待时间。
对于基于多个 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 不要混合隐式和显式等待。这样做会导致不可预测的等待时间。