WebDriver有时间使用implicitlyWait加载元素

时间:2012-03-23 14:51:41

标签: java selenium webdriver

我正在寻找解决方案,在WebDriver(Java)中使用implicitlyWait来点击元素

实施例: 假设我将使用implicitlyWait = 30秒启动WebDriver

然后: webElement.click();

方法click()将等待元素,30秒,当元素可见并准备点击 - > WebDriver将点击它,但我们如何花时间WebDriver花费点击元素,任何想法如何在不使用任何Watch的情况下获得此值?

2 个答案:

答案 0 :(得分:0)

据我所知,implicitlyWait主要用于等待findElement()无法显示的元素。然后点击将是即时的(或者我无法提出它应该等待的任何理由)。所以这没关系,不是吗?

WebElement elem = findElement(By.id("whatever"));
long time = System.currentTimeMillis();
elem.click();
System.out.println("The click and consecutive page load took: " + (System.currentTimeMillis() - time) + " ms.");

答案 1 :(得分:0)

在内部,隐式等待只是一次又一次地调用findElement()丢弃任何ElementNotFoundException,直到返回一个元素或时间用完为止。

你可以通过这样做来编写自己的findElementImplicitlyWait() - 它远非完美,但它应该可以解决问题。

  1. implicitlyWait设为0。
  2. 创建一个新的newFindElement()方法,该方法调用findElement(),直到它返回一个元素而不会抛出异常或直到30秒用完。
  3. 根据自己的喜好使用时间。
  4. 下面的代码(希望可编译=))尝试这样做,并等待等待时间。

    private static final long WAIT_TIME = 30000;
    
    public WebElement findElement(final By by) {
        WebElement elem = null;
        long targetTime = System.currentTimeMillis() + WAIT_TIME;
        do {
            try {
                elem = driver.findElement(by);
            } catch (NoSuchElementException ignored) {
                // nothing to do, element not found
            }
        } while ((elem == null) && (System.currentTimeMillis() < targetTime));
        if (elem == null) {
            throw new NoSuchElementException("No such element found: " + by);
        }
        System.out.println("Waited for " + (targetTime - System.currentTimeMillis()) + " ms.");
        return elem;
    }