第4章 Selenium2-java WebDriver API (二)

简介: 4.8  定位一组元素  定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。定位一组元素一般用于以下场景: ·批量操作元素,例如勾选页面上所有的复选框。

4.8  定位一组元素

 定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数。定位一组元素一般用于以下场景:

·批量操作元素,例如勾选页面上所有的复选框。

·先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位出页面上所有的checkbox,然后选择其中的一个进行操作。

eg:

编写一个html页面。

<html>
 <head>
 <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
   <title>checkbox</title>
   <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.main.css" rel="stylesheet"/>
   <script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.main.js"></script>
   <style>
      .well{
        width:200px;
        height:300px;
        margin:40 auto;
        border:1px solid red;
      }
      .control-group{
        margin-top:30px;
      }
      .controls{
       margin-left:100px;
       margin-top:-15px;
      }
   </style>
   
  </head>
 <body>
  
  <div class="well">
  <h3>checkbox</h3>
   <form class="form-horizontal">
    <div class="control-group">
     <label class="control-label" for="c1">checkbox1</label>
     <div class="controls">
      <input type="checkbox" id="c1"/>
     </div>
     </div>
     
     <div class="control-group">
     <label class="control-label" for="c2">checkbox1</label>
     <div class="controls">
      <input type="checkbox" id="c2"/>
     </div>
     </div>
     
     <div class="control-group">
     <label class="control-label" for="c3">checkbox1</label>
     <div class="controls">
      <input type="checkbox" id="c3"/>
     </div>
     </div>
   </form>
  </div>
 </body>
</html>

java代码;

package com.cy.selenium;

import java.io.File;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Test03 {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("start");
        WebDriver driver = new FirefoxDriver();
        File file = new File("C:/Users/Administrator/Desktop/test.html");
        String filePath = file.getAbsolutePath();
        driver.get(filePath);
        // 通过css查找一组元素
        List<WebElement> inputs = driver.findElements(By.cssSelector("input[type=checkbox]"));
        for (WebElement checkbox : inputs) {
            checkbox.click();
        }
        Thread.sleep(3000);
        // 刷新
        driver.navigate().refresh();
        
        // 选择最后一个checkbox  通过xpath查找一组元素
        List<WebElement> checkboxs = driver.findElements(By.xpath(".//input[@type='checkbox']"));
        checkboxs.get(checkboxs.size()-1).click();
        Thread.sleep(2000);
        driver.close();

    }
}

效果:

 

4.9  多表单切换

 

<html>
 <head>
 </head>
 <body>
  <div class="row_fluid">
   <div class="span10 well">
    <h3>frame</h3>
    <iframe id="if" name="nf" src="http://www.baidu.com" width="1200px" height="300px"></iframe>
   </div>
  </div> 
 </body> 
</html>

 

java代码:

package com.cy.selenium;

import java.io.File;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Iframe {
    
    public static void main(String[] args) throws InterruptedException {
        System.out.println("start");
        WebDriver driver = new FirefoxDriver();
        File file = new File("C:/Users/Administrator/Desktop/frame.html");
        String filePath = file.getAbsolutePath();
        driver.get(filePath);
        
        // 切换到iframe (id="if")
        driver.switchTo().frame("if");
        driver.findElement(By.id("kw")).sendKeys("webDrive");
        driver.findElement(By.id("su")).click();
        Thread.sleep(4000);
        driver.close();
        //退回上一级表单
    //    driver.switchTo().defaultContent();

        
    }

}

 

4.10  多窗口切换

 

4.11  警告框处理

 在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to_alert()方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ sendKeys等方法进行操作。

·getText():返回 alert/confirm/prompt 中的文字信息。

·accept(): 接受现有警告框。
·dismiss():解散现有警告框。
·sendKeys(keysToSend):    发送文本至警告框。keysToSend:将文本发送至警告框。

eg:

package com.cy.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class Alert {
  public static void main(String[] args) throws InterruptedException {
      System.out.println("start selenium");
        WebDriver driver=new FirefoxDriver();// 用WebDriver new Firefox浏览器的驱动给变量driver,相当于driver拿到了Firefox浏览器的控制权。
        driver.get("http://www.baidu.com/");
        Actions action=new Actions(driver);
        // 悬停在设置上
        action.clickAndHold(driver.findElement(By.linkText("设置"))).perform();
        // 打开搜索设置
        driver.findElement(By.className("setpref")).click();
        Thread.sleep(3000);
        //保存设置
        driver.findElement(By.className("prefpanelgo")).click();
        Thread.sleep(2000);
        // 接受弹框
        driver.switchTo().alert().accept();
        
        Thread.sleep(2000);
        
        driver.close();
        
        
}
}

 

相关文章
|
4天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
26 7
|
4天前
|
Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第17天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的编程语法,它允许我们将函数作为参数传递给其他方法,从而使代码更加简洁。Stream API是一种用于处理集合的新工具,它提供了一种高效且易于使用的方式来处理数据。通过结合使用这两个特性,我们可以编写出更加简洁、高效的Java代码。
13 0
|
6天前
|
安全 Java API
Java Stream API详解与使用
Java Stream API是Java 8引入的特性,提供函数式操作处理集合,支持链式操作和并行处理,提升代码可读性和性能。关键点包括:延迟执行的中间操作(如filter, map)和触发计算的终端操作(如collect, forEach)。示例展示了如何从Person列表过滤出年龄大于20的姓名并排序。使用Stream时注意避免中间操作的副作用,终端操作后Stream不能复用,以及并行操作的线程安全性。
12 1
|
6天前
|
设计模式 Java API
Java 可扩展 API 设计:打造灵活的应用架构
【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
46 4
|
1天前
|
Java 程序员 API
Java 8 Lambda 表达式和Stream API:概念、优势和实战应用
【5月更文挑战第20天】在Java 8中,Lambda 表达式和Stream API是两个非常强大的特性,它们显著改变了Java程序员处理数据和编写代码的方式。本篇技术文章将深入探讨这些特性的概念、优点,并提供实战示例,帮助理解如何有效地利用这些工具来编写更简洁、更高效的代码。
17 6
|
3天前
|
安全 Java API
Java进阶-Java Stream API详解与使用
效、更易于维护的代码,同时享受到函数式编程带来的好处。
12 2
|
3天前
|
Java 大数据 API
利用Java Stream API实现高效数据处理
在大数据和云计算时代,数据处理效率成为了软件开发者必须面对的重要挑战。Java 8及以后版本引入的Stream API为开发者提供了一种声明式、函数式的数据处理方式,极大提升了数据处理的效率和可读性。本文将详细介绍Java Stream API的基本概念、使用方法和性能优势,并通过实际案例展示如何在实际项目中应用Stream API实现高效数据处理。
|
6天前
|
Java API
Java 8新特性之Lambda表达式与Stream API实践指南
【5月更文挑战第15天】 随着Java语言的不断发展,Java 8作为一个重要的版本,引入了许多令人兴奋的新特性。其中,Lambda表达式和Stream API是Java 8最受关注的两个特性。本文将深入探讨Lambda表达式的基本概念、语法和使用场景,以及如何结合Stream API实现更加简洁、高效的代码编写。通过实例演示,帮助读者快速掌握这两个新特性,提高Java编程能力。
|
6天前
|
Web App开发 IDE 测试技术
Selenium WebDriver使用
Selenium WebDriver使用
6 1
|
6天前
|
SQL Java API
Java一分钟之-JPA:Java持久化API简介
【5月更文挑战第14天】Java Persistence API (JPA) 是Java的ORM规范,用于简化数据库操作。常见问题包括实体映射、事务管理和性能问题。避免错误的关键在于明确主键策略、妥善使用事务、优化查询及理解实体生命周期。示例展示了如何定义实体和使用`EntityManager`保存数据。JPA通过标准化API让开发者更专注于业务逻辑,提升开发效率和代码维护性。
14 0