I need to iterate over all iframes and their child iframes on the fly as I want to perform some action on all the <img>
tags. I am using selenium.
public class logic {
static WebDriver driver;
static List<WebElement> TotaliinnerFrames=null;
logic()
{
driver=new FirefoxDriver();
driver.get("aaaa.html");
}
public static void main(String[] args)
{
logic log=new logic();
find_parent_iFrame();
}
private static void find_parent_iFrame()
{
List<WebElement> TotaliFrames = driver.findElements(By.tagName("iframe"));
System.out.println("TotaliFrames\t"+TotaliFrames.size());
for(WebElement frame:TotaliFrames)
{
System.out.println("calling main frame==============================>\t");
findLandingPage(frame);
}
if(TotaliFrames.size()>0)
{
driver.switchTo().defaultContent();
}
else
{
List<WebElement> canvas = driver.findElements(By.tagName("canvas"));
List<WebElement> img = driver.findElements(By.tagName("img"));
List<WebElement> anchor = driver.findElements(By.tagName("a"));
if(canvas.size()>0)
{
System.out.println("inside canvas");
for(WebElement canvTemp : canvas)
{
callClick(canvTemp);
}
}
if(img.size()>0)
{
System.out.println("inside img");
for(WebElement imge : img)
{
callClick(imge);
}
}
if (anchor.size()>0)
{
System.out.println("inside anchor");
for(WebElement anchorc : anchor)
{
callClick(anchorc);
}
}
}
}
private static void findLandingPage(WebElement frame)
{
driver.switchTo().frame(frame);
List<WebElement> canvas = driver.findElements(By.tagName("canvas"));
List<WebElement> img = driver.findElements(By.tagName("img"));
List<WebElement> anchor = driver.findElements(By.tagName("a"));
System.out.println("canvas\t"+canvas.size());
System.out.println("img\t"+img.size());
System.out.println("anchor\t"+anchor.size());
if(canvas.size()>0)
{
System.out.println("inside canvas");
for(WebElement canvTemp : canvas)
{
callClick(canvTemp);
}
}
if(img.size()>0)
{
System.out.println("inside img");
for(WebElement imge : img)
{
callClick(imge);
}
}
if(anchor.size()>0)
{
System.out.println("inside anchor");
for(WebElement anchorc : anchor)
{
callClick(anchorc);
}
}
TotaliinnerFrames = driver.findElements(By.tagName("iframe"));
System.out.println("TotaliinnerFrames\t"+TotaliinnerFrames.size());
int innerframesize=TotaliinnerFrames.size();
if(innerframesize>0)
{
System.out.println("TotaliinnerFrames\t"+innerframesize);
for(WebElement inframe:TotaliinnerFrames)
{
System.out.println("calling inner recursive\t");
findLandingPage(inframe);
}
TotaliinnerFrames.clear();
}
else
{
driver.switchTo().defaultContent();
}
}
private static void callClick(WebElement canvTemp)
{
try
{
canvTemp.click();
}
catch(Exception e)
{
System.out.println("Exception unable to click");
}
}
}