51Testing软件测试论坛

标题: WebDriver API(1)多表单切换 [打印本页]

作者: 测试积点老人    时间: 2018-12-6 14:45
标题: WebDriver API(1)多表单切换
常用方法:

在 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()方法跳出表单。







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2