我需要创建一个监视selenium执行的进程,如果在执行期间到达,将单击弹出窗口
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要创建一个监视selenium执行的进程,如果在执行期间到达,将单击弹出窗口相关的知识,希望对你有一定的参考价值。
我需要创建一个监视selenium执行的进程,如果在执行期间到达,将单击弹出窗口。
假设我的selenium自动化脚本当前正在执行,突然出现一些弹出窗口,我需要处理弹出窗口。我该怎么办?
在我的项目中,我们所有的脚本都准备就绪,所以没有机会修改它们。所以我需要创建单独的线程来监视Selenium脚本执行并处理弹出窗口。
请建议在这方面可以做些什么。
答案
Java支持创建动态代理类和实例。代理对象在许多情况下都很有用。
实现此接口的ElementProxy类。基本上,在调用实际方法之前,将首先调用代理的invoke方法。我们的想法是在调用WebElement上的任何操作之前调用checkForPopupAndKill,这可能是包含checkForPopupAndKill方法的正确位置。
公共类ElementProxy实现InvocationHandler {
private final WebElement element;
public ElementProxy(WebElement element) {
this.element = element;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//before invoking actual method check for the popup
this.checkForPopupAndKill();
//at this point, popup would have been closed if it had appeared. element action can be called safely now.
Object result = method.invoke(element, args);
return result;
}
private void checkForPopupAndKill() {
if (popup.isDisplayed()) {
System.out.println("You damn popup, you appearded again!!?? I am gonna kill you now!!");
popup.close();
}
}
}
需要使用此代理对象包装常规WebElement。我们基本上需要一个具有接受WebElement的方法的类,并使用一些包装器返回WebElement。
公共课ElementGuard {
public static WebElement guard(WebElement element) {
ElementProxy proxy = new ElementProxy(element);
WebElement wrappdElement = (WebElement) Proxy.newProxyInstance(ElementProxy.class.getClassLoader(),
new Class[] { WebElement.class },
proxy);
return wrappdElement;
}
}
以上是关于我需要创建一个监视selenium执行的进程,如果在执行期间到达,将单击弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章