java - WebDriver FluentWait - 函数/谓词可以抛出异常吗?

标签 java selenium webdriver guava

我正在扩展 Selenium 的 By类进入更广泛Locator类可以接受不同类型的位置标准,并将为我们的 SearchContext 版本提供新方法和/或 WebDriver .

我有以下方法等待唯一元素存在、显示并启用:

public void waitForElementPresent(BSWebDriver driver, int timeoutSeconds) {
    try {
        FluentWait<BSWebDriver> wait = new FluentWait<BSWebDriver>(driver)
                .withTimeout(timeoutSeconds, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
                .ignoring(NoSuchElementException.class);

        wait.until(new Function<BSWebDriver, Boolean>() {
            public Boolean apply(BSWebDriver driver)  {
                return isElementPresent(driver);
            }
        });
    } catch (TimeoutException timeoutEx) {
        throw new WaitForElementException(this, timeoutSeconds,
                WAIT_FOR.PRESENT);
    }
}

isElementPresent是一种处理元素是否存在(即它存在、显示和启用)的检查的方法,但无需等待。问题是isElementPresent引发自定义错误 Exception如果定位器不能唯一标识某个元素(即,如果返回多个与位置条件匹配的元素)。目前,上述代码中存在编译错误,因为据我所知,Function 都没有。也不Predicate允许抛出 Exception ,并且没有任何子类可以这样做。

有什么办法可以做到这一点吗?是否有某种形式的 FunctionPredicate 可以抛出异常,就像 Java 的 CallableRunnable ?如果没有,我想我可能只需要编写我自己的等待功能版本。谢谢!

最佳答案

如果您让自定义异常抛出扩展 RuntimeException 而不是 Excetion,您应该能够正常抛出它。

关于java - WebDriver FluentWait - 函数/谓词可以抛出异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199224/

相关文章:

java - 有没有办法在 try-with-resources 中创建和刷新 I/O 流?

java - 机器人类 - KeyEvent 无法将文档上传到 Windows 文件夹 KeyEvent.VK_V

java - 截屏并通过 Selenium WebDriver 和 java 中的 FileUtils 进行复制

python - 属性错误: module 'selenium.webdriver.common.by' has no attribute 'XPATH' using Selenium Python

没有 JavaMail API 的 Java POP3 消息解析器

java - 用递归构建直角三角形

java - 使用 Selenium 在java中获取隐藏元素给出错误

java - 从 Selenium 2.47.0 迁移到带有 FF 54 的 Selenium 3.13.0 后出现错误

javascript - 如何使用 wdio 处理弹出窗口?

java - java中不允许使用标签继续