51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1399|回复: 0
打印 上一主题 下一主题

WebDriver API(1)多表单切换

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 527 天

    连续签到: 4 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-6 14:45:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    常用方法:
    • switchTo().frame() : 将当前定位的主体切换为 frame/iframe 表单的内嵌页面中;
    • switchTo().defaultContent() : 方法跳出表单;

    在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个页面上对元素识别与定位,对于 frame/iframe 表单内嵌页面上的元素无法直接定位。这时就需要通过 switchTo().frame()方法将当前定位的主体切换为 frame/iframe 表单的内嵌页面中。

    1. // frame.html
    2. <html>
    3.     <head>
    4.         <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
    5.         <script type="text/javascript">
    6.             $(document).ready(function(){});
    7.         </script>
    8.     </head>

    9.     <body>
    10.         <div class="row-fluid">
    11.             <div class="span10 well">
    12.                 <h3>frame</h3>
    13.                 <iframe id="if" name="nf" src="http://www.baidu.com" width="800"height="300">
    14.                 </iframe>
    15.             </div>
    16.         </div>
    17.     </body>

    18.     <scriptsrc="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js">   </script>
    19. </html>
    复制代码

    在 html 代码中,通过 iframe 表单嵌入一个百度页面;这 个 时 候 直 接 定 位 页 面 上 的 百 度 的 输 入 框 一 定 会 报 找 不 到 元 素 的 错 误 , 因 此 可 以 使 用switchTo().frame()先找到 frame.html 中的<iframe>标签,然后再定位百度输入框。

    1. public static void main(String[] args) throws InterruptedException {
    2.         WebDriver driver = new ChromeDriver();
    3.         File file = new File("E:/jase/frame.html");
    4.         String filePath = file.getAbsolutePath();
    5.         driver.get(filePath);

    6.         driver.switchTo().frame("if");                    //切换到 iframe(id = "if")
    7.         driver.findElement(By.id("kw")).sendKeys("webdriver");
    8.         driver.findElement(By.id("su")).click();
    9.         Thread.sleep(5000);
    10.         driver.quit();
    11.     }
    复制代码

    switchTo().frame()默认可以直接取表单的 id 或 name 属性。如果 iframe 没有可用的 id 和 name 属性,则可以通过下面的方式进行定位。

    1. WebElement xf = driver.findElement(By.xpath("//iframe[@id='if']"));   //先通过 xpth 定位到 iframe
    2. driver.switchTo().frame(xf); ……
    3. driver.switchTo().defaultContent(); //退回上一级表单
    复制代码

    如果完成了在当前表单上的操作,则可以通过 switchTo().defaultContent()方法跳出表单。


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 06:44 , Processed in 0.063138 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表