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}