001package org.nuxeo.functionaltests.pages.admincenter;
002
003import org.openqa.selenium.By;
004import org.openqa.selenium.WebDriver;
005import org.openqa.selenium.WebElement;
006
007/**
008 * Wizard and Connect use frames and callback pages to communicate. So focusing the right frame can be tricky because,
009 * for example we never want to do any test on the callback pages.
010 *
011 * @author Tiry (tdelprat@nuxeo.com)
012 */
013public class IFrameHelper {
014
015    public static final String WE_IFRAME_URL_PATTERN = "/site/connectClient";
016
017    public static final int NBTRY = 10;
018
019    public static boolean focusOnWEIFrame(WebDriver driver) {
020        return focusOnWEIFrame(driver, NBTRY);
021    }
022
023    protected static void wait(int nbSeconds) {
024        try {
025            Thread.sleep(nbSeconds * 1000);
026        } catch (InterruptedException e) {
027        }
028    }
029
030    private static boolean focusOnWEIFrame(WebDriver driver, int nbTry) {
031
032        if (!driver.getCurrentUrl().contains(WE_IFRAME_URL_PATTERN)) {
033            if (nbTry > 0) {
034                try {
035                    WebElement iFrame = driver.findElement(By.id("connectIframe"));
036                    if (iFrame != null) {
037                        driver.switchTo().frame(iFrame);
038                        return true;
039                    } else {
040                        wait(2);
041                        return focusOnWEIFrame(driver, nbTry - 1);
042                    }
043                } catch (Throwable e) {
044                    System.out.println("Retry to find IFrame on page " + driver.getCurrentUrl());
045                    wait(2);
046                    return focusOnWEIFrame(driver, nbTry - 1);
047                }
048            } else {
049                return false;
050            }
051        } else {
052            return true;
053        }
054    }
055
056}