gpt4 book ai didi

java - 如何在 WebDriverWait 超时之前添加日志

转载 作者:太空宇宙 更新时间:2023-11-04 06:36:33 25 4
gpt4 key购买 nike

我使用 selendroid 来测试混合应用程序。我有自己的记录器,可以记录并使用 WebDriverWait 来等待特定行为。我的问题是如何在 WebDriverWait 失败并抛出 timeoutException 之前使用我的记录器?

最佳答案

首先,我对selendroid一无所知。

一个简单的解决方案可能是:

public void waitForCondition(WebElement element){
try{
new WebDriverWait(driver, 60)
.until(ExpectedConditions.visibilityOf(element)); // your condition
} catch (TimeoutException e){
// do log or whatever
}
}

无论如何,您通常通过实现 WebDriverEventListener 来做到这一点并将其注册为 EventFiringWebDriver ,然后调用它,如下所示:

EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(new FirefoxDriver());
MyWebDriverEventListener listener = new MyWebDriverEventListener();
eventFiringWebDriver.register(listener);

其中MyWebDriverEventListener类似于

class MyWebDriverEventListener implements WebDriverEventListener {
// .. skipped
}

因此,基本上,WebDriverWaituntil 方法正在执行 driver.findElement 直到:

重复将此实例的输入值应用于给定函数,直到发生以下情况之一:

  • 该函数既不返回 null 也不返回 false,
  • 函数抛出一个不可忽略的异常,
  • 超时到期,
  • 当前线程被中断

因此,您可以做的是在 WebDriverEventListener

中实现日志记录
public void afterFindBy(By by, WebElement element, WebDriver driver) {
// Do logging
}

这将在每次找到元素时应用(不仅是等待,还包括常规的 driver.findElement)。无论如何,这不包括抛出异常的情况。您还有机会登录 onException 方法,使用类似

if (throwable instanceof TimeoutException){
// log
}

我不会这样做,但这是你的代码。

话虽如此,我通常不会这样做,因为我不关心如此详细的日志级别,我只有 2 个辅助方法可以处理我需要的所有等待:

public void waitUntil(WebElement element) {
new WebDriverWait(driver, 60)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class)
.until(ExpectedConditions.visibilityOf(element));
}

public void waitUntil(List<WebElement> elements) {
new WebDriverWait(driver, 60)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class)
.until(ExpectedConditions.visibilityOfAllElements(elements));
}

在那里添加日志记录是很简单的。

<小时/>

编辑:我有以下解决方案:

public class Demo {

@Test
public void testEventFire(){
EventFiringWebDriver firingWebDriver = new EventFiringWebDriver(new FirefoxDriver());
firingWebDriver.register(new MyListener());
try {
firingWebDriver.navigate().to(new URL("http://www.google.com"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

private static class MyListener extends AbstractWebDriverEventListener {
@Override
public void beforeNavigateTo(String url, WebDriver driver) {
System.out.println("beforeNavigateTo");
}

}

关于java - 如何在 WebDriverWait 超时之前添加日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com