【发布时间】:2018-01-21 12:35:24
【问题描述】:
我的代码可以打开浏览器窗口并浏览到 URL。我的代码中没有发现任何错误。我需要处理浏览器生成的事件,尤其是当用户关闭浏览器窗口时。我的 OverrideClass 中没有任何消息被捕获。
我有这个:
try {
System.setProperty("webdriver.gecko.driver", "./geckodriver.exe");
driver = new FirefoxDriver();
EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
OverrideClass oc = new OverrideClass();
eventDriver.register(oc);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
} catch (Exception ex) {
Log.logError("Browser.initBrowser(): " + ex.getLocalizedMessage());
}
消息处理程序如下所示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.WebDriverEventListener;
public class OverrideClass implements WebDriverEventListener{
// @Override
// public void afterChangeValueOf(WebElement arg0, WebDriver arg1) {
//
// }
@Override
public void afterClickOn(WebElement arg0, WebDriver arg1) {
System.out.println("OverrideClass.afterClickOn(): " + arg0.toString());
}
@Override
public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) {
System.out.println("OverrideClass.afterFindBy(): " + arg0.toString()); }
@Override
public void afterNavigateBack(WebDriver driver) {
System.out.println("After clicking back "+ driver.getCurrentUrl());
}
@Override
public void afterNavigateForward(WebDriver arg0) {
}
@Override
public void afterNavigateTo(String arg0, WebDriver arg1) {
}
@Override
public void afterScript(String arg0, WebDriver arg1) {
}
// @Override
// public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) {
//
// }
@Override
public void beforeClickOn(WebElement arg0, WebDriver arg1) {
}
@Override
public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) {
}
@Override
public void beforeNavigateBack(WebDriver driver) {
System.out.println("OverrideClass.beforeNavigateBack() Before clicking back: " + driver.getCurrentUrl());
}
@Override
public void beforeNavigateForward(WebDriver arg0) {
System.out.println("OverrideClass.beforeNavigateForward() Before clicking back: " + arg0.getCurrentUrl());
}
@Override
public void beforeNavigateTo(String arg0, WebDriver arg1) {
System.out.println("OverrideClass.beforeNavigateTo(): " + arg0);
}
@Override
public void beforeScript(String arg0, WebDriver arg1) {
}
@Override
public void onException(Throwable arg0, WebDriver arg1) {
System.out.println("OverrideClass.onException(): " + arg0.getLocalizedMessage());
}
@Override
public void afterAlertAccept(WebDriver arg0) {
}
@Override
public void afterAlertDismiss(WebDriver arg0) {
}
@Override
public void afterChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence[] arg2) {
}
@Override
public void afterNavigateRefresh(WebDriver arg0) {
}
@Override
public void beforeAlertAccept(WebDriver arg0) {
}
@Override
public void beforeAlertDismiss(WebDriver arg0) {
}
@Override
public void beforeChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence[] arg2) {
}
@Override
public void beforeNavigateRefresh(WebDriver arg0) {
}
}
【问题讨论】:
-
您是通过
eventDriver加载页面吗?看来您仍然使用原始的driver(driver.manage().timeouts()) 而不是eventDriver包装器。 -
EventFiringWebDriver 用于侦听通过该驱动程序上的代码启动的事件,而不是用于用户生成的事件。如果用户更改浏览器的 url,则不会在您的代码上触发任何事件。因此,只有在您对
eventDriver对象采取操作时才会触发此事件 -
@VinceEmigh 谢谢!很好的收获。
-
@TarunLalwani 无赖。感谢您澄清这一点。 :)
-
请阅读How to Ask,尤其是关于minimal reproducible example(MCVE)和How much research effort is expected?的部分,这将帮助您调试自己的程序并自己解决问题。如果您这样做并且仍然卡住,您可以返回并发布您的 MCVE、您尝试过的内容以及执行结果(包括任何错误消息),以便我们更好地帮助您。还提供指向页面和/或相关 HTML 的链接。