• Selenium Webdriver——操作隐藏的元素(三)switchTo().frame()


    在web 应用中经常会遇到frame 嵌套页面的应用,页WebDriver 每次只能在一个页面上识别元素,对
    于frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过switch_to_frame()
    方法将当前定位的主体切换了frame 里。

    在上面的html 代码中通过iframe 表单嵌入一个百度页面,通过浏览器打开如下图

    图4.9 iframe 嵌入百度首页
    这个时候直接定位百度的输入框一定会报找不到元素的错误。那么可以使用switchTo().frame()先找到
    frame.html 中的<iframe>标签,然后再定位百度输入框。

    package com.mypro.jase;
    import java.io.File;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    public class frame {
         public static void main(String[] args) throws InterruptedException {
              WebDriver driver = new ChromeDriver();
              File file = new File("E:/jase/frame.html");
              String filePath = file.getAbsolutePath();
              driver.get(filePath);
              //切换到iframe(id = "if")
              driver.switchTo().frame("if");
              driver.findElement(By.id("kw")).sendKeys("webdriver");
              driver.findElement(By.id("su")).click();
              Thread.sleep(5000);
              driver.quit();
         }
    }

    switchTo().frame()默认可以直接取表单的id 或name 属性进行切换。如:

    //id = "if"
    driver.switchTo().frame("if");
    //name="nf"
    driver.switchTo().frame("nf");

    那么如果iframe 没有可用的id 和name 可以通过下面的方式进行定位:

    //先通过xpth 定位到iframe
    WebElement xf = driver.findElement(By.xpath("//iframe[@id='if']"));
    driver.switchTo().frame(xf);


    //退回上一级表单
    driver.switchTo().defaultContent();

    如果完成了在当前表单上的操作可以通过switchTo().defaultContent()方法返回到上一层表单。该方法
    不用指定某个表单的返回,默认对应与它最近的switchTo().frame()方法。

  • 相关阅读:
    Canvas文本绘制
    Canvas贝塞尔三级曲线
    Canvas贝塞尔二级曲线
    Canvas arcTo绘制圆弧
    mybatis springmvc调用oracle存储过程,返回记录集
    java调用oracle存储过程,返回结果集
    oracle存储过程返回结果集
    存储过程变量类型定义与表字段一致
    HTML5获取当前的经纬度坐标
    实现精灵沿着圆形轨迹运动
  • 原文地址:https://www.cnblogs.com/111testing/p/6384805.html
Copyright © 2020-2023  润新知