Мне нужно создать процесс, который будет контролировать выполнение селен и будет нажимать на всплывающие окна, если прибывает во время выполнения - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно создать процесс, который будет следить за выполнением селена и щелкать по всплывающим окнам, если поступит во время выполнения.

Предположим, что мой сценарий автоматизации селена в данный момент выполняется, неожиданно появляется какое-то всплывающее окно, и мне нужно обработатьнеожиданно возникнуть.Что мне делать?

В моем проекте все наши скрипты готовы, поэтому нет никаких шансов изменить их.Поэтому мне нужно создать отдельный поток, который будет следить за выполнением сценария Selenium и обрабатывать всплывающее окно.

Пожалуйста, предложите, что можно сделать в этом отношении.

1 Ответ

0 голосов
/ 23 мая 2018

Java поддерживает создание динамических прокси-классов и экземпляров.Прокси-объекты полезны во многих ситуациях.

Класс ElementProxy, который реализует этот интерфейс.По сути, метод invoke прокси будет вызываться первым до вызова фактического метода.Поскольку наша идея состояла в том, чтобы вызвать checkForPopupAndKill перед вызовом какого-либо действия с WebElement, это может быть подходящим местом для включения метода 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;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...