我需要创建一个监视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执行的进程,如果在执行期间到达,将单击弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

检查文件是由进程创建还是由用户使用C ++创建

如何在 AIX 中监视没有 cron 作业的文件更改

在stackdriver上监视VM进程

使用Selenium框架,如何在现有选项卡中执行进程?

进程线程创建与退出监视(DBGVIEW打印)

如何监视某一进程的CPU占用率