zoukankan      html  css  js  c++  java
  • 【java+selenium3】特殊元素iframe的定位及详解(三)

    一、iframe 内联框架

     1.自己写个网页,仅供理解iframe演示使用,如下

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>iframeA</title>
    <style type="text/css">
    div {
        border:2px solid red;
        width: 800px;
        height: 350px;
    }
    #iframe_a {
        border:2px solid red;
        width: 500px;
        height: 300px;
    }
    
    </style>
    </head>
    <body>
        <div>
        <br>iframeA:
            <input id='input_a' type='text'>
        <iframe id='iframe_a' name='iframe_a_name' class='iframe_cls' src="./iframeB.html"></iframe>
        <br>
        </div><br>
    </body>
    </html>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>iframeB</title>
    <style type="text/css">
    div {
        width: 400px;
        height: 200px;
    }
    #iframe_b {
        
        width: 300px;
        height: 100px;
    }
    </style>
    </head>
    <body>
        <div>
        <br>
        iframeB:
            <input id='input_b' type='text'>
             <iframe id='iframe_b'  name='iframe_b_name' src="./iframeC.html"></iframe>
        </div>
    </body>
    </html>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>iframeC</title>
    </head>
    <body>
        <div>
        <br>iframeC:
            <input id='input_c' type='text'>
        </div>
    </body>
    </html>

    展示如下:

    2.依次写入iframeA输入框,iframeB输入框,iframeC输入框代码实现

    driver.navigate().to("file:///D:/xxx/test_html/iframeA.html");
    driver.findElement(By.id("input_a")).sendKeys("iframe_A");
    //切换iframe;将驱动对象的作用域切换至b页面
    driver.switchTo().frame("iframe_a");//传入iframe_id进行切换
    driver.findElement(By.id("input_b")).sendKeys("iframe_B");
    WebElement element = driver.findElement(By.id("iframe_b"));
    //切换iframe
    driver.switchTo().frame(element);//传入iframe元素进行切换
    driver.findElement(By.id("input_c")).sendKeys("iframe_C");

    注意:iframe只能是按照顺序层级切换,不能从iframe_A直接切换至iframe_C

    3.当你写入iframe_C的时候,返回iframe_B修改写入文本值,再返回iframe_A修改输入的文本值,代码实现;

    //切换父节点:parentiframe
    driver.switchTo().parentFrame();
    driver.findElement(By.id("input_b")).clear();
    driver.findElement(By.id("input_b")).sendKeys("C返回父节点B,修改iframe_B");
    driver.switchTo().parentFrame();
    driver.findElement(By.id("input_a")).clear();
    driver.findElement(By.id("input_a")).sendKeys("B返回父节点A,修改iframe_A");

    4.直接返回切换到顶级的父节点iframe例如:C输入后,直接切换到A文本框输入:

    /**
    WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
    
    Selects either the first frame on the page, or the main document when a page contains iframes.
    Returns:This driver focused on the top window/first frame.
    **/
    driver.switchTo().defaultContent();
    //直接返回切换到顶级的父节点iframe例如:C输入后,直接切换到A文本框输入:
    driver.switchTo().defaultContent();
    driver.findElement(By.id("input_a")).clear();
    driver.findElement(By.id("input_a")).sendKeys("C直接切顶级A,再次修改iframe_A");

    5.学习后总结,不足之处后续补充修正!

  • 相关阅读:
    软考笔记(二)
    软件工程笔记
    安卓反编译
    [转] 扫描二维码自动区分下载Android或者iOS
    git使用技巧总结
    利用iTunes给MP3添加专辑插图
    Flex弹性盒子中`flex-grow`,`flex-shrink`,`flex-basis`的区别
    Android 中Activity和Fragment的启动顺序
    Java 类加载的过程
    Android Studio 查看源码出现throw new RuntimeException("Stub!"); 解决办法
  • 原文地址:https://www.cnblogs.com/xiaozhaoboke/p/11100595.html
Copyright © 2011-2022 走看看