java - 使用 selenium,我需要动态迭代所有 iframe 及其子 iframe

标签 java iframe selenium-webdriver

我需要动态迭代所有 iframe 及其子 iframe,因为我想对所有 <img> 执行一些操作。标签。我正在使用 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");
    }
}

}

我需要动态迭代所有 iframe 及其子 iframe,我想要所有标签并执行一些操作。使用 Selenium 。

最佳答案

您无法跨页面加载(例如通过点击启动)保存对 WebElement 的引用,因为它们仅在其自己的页面上有效。它们不仅仅是任何旧的 Java 对象。正如您所见,您将得到 StaleElementReferenceException

逐页工作,而不是多个页面。

编辑:这里是an even better explanation .

关于java - 使用 selenium,我需要动态迭代所有 iframe 及其子 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35130727/

相关文章:

javascript - 简单的iFrame不显示一些跨域页面

jenkins - 在 ubuntu 14.1 上安装的 Jenkins 上运行 TestNG 测试用例时出现 "java.lang.IllegalStateException: The driver is not executable"错误

java - "Implicit wait"等待元素可点击、显示或可见

java - AMR - 如何上采样

reactjs - 如何获取用户输入(YouTube视频链接)并使用React.js将其嵌入为iframe?

php - 有什么方法可以替换 iframe 吗?

java - 从Excel读取数据时出现空指针异常?

java - 在java gui中添加多个图像

java - propertiesfactorybean vs propertyplaceholderconfigurer spring?

java - 是什么导致这段代码抛出异常?