【问题标题】:Check for element to be clickable without an explicit wait time在没有明确等待时间的情况下检查元素是否可点击
【发布时间】:2015-07-09 20:57:48
【问题描述】:

正如Selenium Documentation 所述,我们绝不应该混淆显式隐式等待时间:

警告:不要混合隐式和显式等待。这样做会导致不可预测的等待时间。例如,设置 10 秒的隐式等待和 15 秒的显式等待,可能会导致 20 秒后发生超时。

我已将隐式等待时间设置为 5000 毫秒。在一些浏览器交互结束时,我只想验证所需的链接是否可点击。

我知道这可以通过使用ExpectedConditions 来完成,但这意味着如下例所示的明确等待时间。

protected PageNewDocument isElementClickable(WebElement element)
{
    (new WebDriverWait(driver, 1)).until(ExpectedConditions.elementToBeClickable(element));
    return this;
}

如何在没有明确等待时间定义的情况下检查可点击的元素?

【问题讨论】:

  • 使用隐式等待有什么问题?
  • @HelpingHands 你的意思是,隐式等待时间的目的是什么?某些内容会动态重新加载,因此由于延迟可能无法立即使用。通过隐式等待时间,我不必关心动态内容。
  • 不,我的意思是你说你正在使用 5000 毫秒的隐式等待时间,所以这不起作用吗?
  • @HelpingHands 是的,它有效。我需要的是某事。喜欢:boolean clickable = driver.isElementClickable(element);
  • 所以你只想返回YES/NO?或者您想检查元素是否可点击?等待期间?

标签: java user-interface selenium gui-testing gui-test-framework


【解决方案1】:

前几天回答了一个类似的问题here。此方法在返回 true 之前等待页面加载。所以你的元素应该是可点击的。

private static WebDriverWait wait = new WebDriverWait(driver, 60);
private static JavascriptExecutor js  = (JavascriptExecutor) driver;

public static void waitForPageLoaded() {
            wait.until(new ExpectedCondition<Boolean>() {
                public Boolean apply(WebDriver driver) {
                    Boolean res = (js.executeScript("return document.readyState").equals("complete"));
                    System.out.println("[DEBUG] waitForPageLoaded: " + res);
                    return res;
            }
    });
}

【讨论】:

  • 是的,这是正确的,但您仍然在此处定义明确的等待时间:private static WebDriverWait wait = new WebDriverWait(driver, 60);
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 2015-06-22
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2015-01-12
  • 1970-01-01
相关资源
最近更新 更多