All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kie.wb.selenium.util.ObstructedClickExceptionHandler Maven / Gradle / Ivy

There is a newer version: 7.74.1.Final
Show newest version
/*
 * Copyright 2019 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.kie.wb.selenium.util;

import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ObstructedClickExceptionHandler {

    private static final Logger LOG = LoggerFactory.getLogger(BusyPopup.class);

    /*
     * Clicking an element might fail if there is gwt-PopupPanelGlass or alert in the way.
     * This method ignores click failures caused by WebDriverException's like
     *
     * 
     * Element 
* * and retries clicking until the obstructing element disappears * * * WARNING: the standard selenium way of dealing with these exceptions (waiting for something to become true * using WebDriverWait) doesn't work because of the non-predictable nature of these popups/alerts, * so it's not clear where such waits should be placed. */ public static void retryClickUntilNotObstructed(WebElement element) { int triesRemaining = 100; boolean firstTime = true; while (triesRemaining > 0) { try { element.click(); return; } catch (WebDriverException e) { if (isClickObstructedByPopupPanelGlass(e) || isClickObstructedByAlert(e)) { triesRemaining--; if (firstTime) { firstTime = false; String firstLineOfExceptionMessage = e.getMessage().split("\n")[0]; LOG.warn("Clicking element {} failed: {}", element, firstLineOfExceptionMessage); } else { LOG.debug("Retrying click, {} tries remaining.", triesRemaining); } Waits.pause(100); } else { throw e; } } } } private static boolean isClickObstructedByPopupPanelGlass(WebDriverException e) { return e.getMessage().contains("gwt-PopupPanelGlass"); } private static boolean isClickObstructedByAlert(WebDriverException e) { return e.getMessage().contains("alert-dismissable"); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy