我正在寻找解决方案,在WebDriver(Java)中使用implicitlyWait来点击元素
实施例: 假设我将使用implicitlyWait = 30秒启动WebDriver
然后: webElement.click();
方法click()将等待元素,30秒,当元素可见并准备点击 - > WebDriver将点击它,但我们如何花时间WebDriver花费点击元素,任何想法如何在不使用任何Watch的情况下获得此值?
答案 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()
- 它远非完美,但它应该可以解决问题。
implicitlyWait
设为0。newFindElement()
方法,该方法调用findElement()
,直到它返回一个元素而不会抛出异常或直到30秒用完。下面的代码(希望可编译=))尝试这样做,并等待等待时间。
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;
}