第4章 Selenium2-java WebDriver API (一)

4.1  从定位元素开始

WebDriver提供了八种元素定位方:   在Java语言中对应的定位方法:

·id                findElement(By.id())        
·name              findElement(By.name())
·class name            findElement(By.className())
·tag name            findElement(By.tagName())
·link text              findElement(By.linkText())
·partial link text         findElement(By.partialLinkText())
·xpath              findElement(By.xpath())
·css selector             findElement(By.cssSeletor())

 

id定位:name定位,class定位都是通过他们的属性值来的。

link定位:专门用来定位文本链接。eg:<a class="mnav" name="tj_trnews" href="http://news.baidu.com">新闻</a>  对应的link定位 findElement(By.linkText("新闻"))。

partial link定位:parial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接。eg:<a class="mnav" name="tj_trnews" href="http://news.baidu.com">这是一个很长很长的文本链接</a>  对应的partial link定位   findElement(By.partialLinkText("一个很长的"))   或  findElement(By.partialLinkText("文本链接"))。

xpath定位:最简单的找到元素的位置的方法就是打开FireBug。

 

 CSS定位:<span class="sp">

                    <input id="abc" name="def" class="ghi" type="text" maxlength='100' />

               </span>

     通过class属性定位:findElement(By.cssSelector(".ghi"));

     通过id属性定位:findElement(By.cssSelector("#abc"));

     通过标签名定位:findElement(By.cssSelector("input"));

   通过父子关系定位: findElement(By.cssSelector("span > input"));

     通过属性定位:findElement(By.cssSelector("input[maxlength='100']"));

 

XPath与CSS的类似功能的简单对例如下表所示

    

 

 

package com.cy.selenium;

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

import bsh.commands.dir;

public class Test01 {
    public static void main(String[] args) {
        System.out.println("start selenium");
        WebDriver driver=new FirefoxDriver();// 用WebDriver new Firefox浏览器的驱动给变量driver,相当于driver拿到了Firefox浏览器的控制权。
        driver.manage().window().maximize();
        driver.get("http://www.awbeci.com/");
        driver.findElement(By.xpath(".//*[@id='navbar-collapse-01']/ul[2]/li[2]/button")).click();
        driver.findElement(By.id("username")).sendKeys("SmileCy");
        driver.findElement(By.id("password")).sendKeys("1314520");
        driver.findElement(By.linkText("登录")).click();
        driver.findElement(By.xpath(".//*[@id='main-container']/div[1]/div[2]/div/div[2]/div/a[3]/span")).click();

        // 回车键查询
        driver.findElement(By.cssSelector(".form-control")).sendKeys("软件测试学");
        new Actions(driver).sendKeys(Keys.ENTER).perform();// 按回车键

        // 后退
       driver.navigate().back();

       // 刷新
       driver.navigate().refresh();

       // 关闭浏览器
        driver.close();

    }

}

 

 

4.2  控制浏览器

   4.2.1  控制浏览器窗口大小 

 driver.manage().window().setSize(new Dimension(400, 500));

  4.2.2  控制浏览器后退、前进

     WebDriver也提供了对应的back()和forward()方法来模拟后退和前进按钮

     // 后退
       driver.navigate().back();

       // 刷新
       driver.navigate().refresh();

 

  4.2.3  模拟浏览器刷新

driver.navigate().refresh();

4.3  简单元素操作

·clear()             清除文本。
·sendKeys(*value)     模拟按键输入。
·click()             单击元素。

  4.3.2  WebElement接口常用方法

submit()   submit()方法用于提交表单

getSize()             返回元素的尺寸。

getText()             获取元素的文本。

getAttribute(name)     获得属性值。

isDisplayed()         设置该元素是否用户可见。

4.4  鼠标事件

Actions 类提供了鼠标操作的常用方法:
· contextClick()    右击
· clickAndHold()   鼠标点击并控制
· doubleClick()    双击
· dragAndDrop()   拖动
· release()        释放鼠标

· perform()  执行所有Actions中存储的行为

 

鼠标右击操作。

导入提供鼠标操作的ActionChains 类
Actions(driver)
调用Actions()类,将浏览器驱动driver作为参数传入。
contexClick(xxx)
contextClick()方法用于模拟鼠标右键操作,在调用时需要指定元素定位。
perform() 执行所有ActionChains中存储的行为,可以理解成是对整个操作的提交动作。

 action.contextClick(driver.findElement(By.className("cnisdisd"))).perform();

 

鼠标悬停。clickAndHold();

 action1.clickAndHold(driver.findElement(By.linkText("设置"))).perform();

 

鼠标双击操作。
doubleClick()方法用于模拟鼠标双击操作。

 action1.doubleClick(driver.findElement(By.className(""))).perform();

 

鼠标拖放操作。
drag_and_drop(source, target)在源元素上按下鼠标左键,然后移动到目标元素上释放。
·source:鼠标拖动的源元素。
·target:鼠标释放的目标元素。

      WebElement source=driver.findElement(By.className("element"));
      WebElement target=driver.findElement(By.className("element"));
      action1.dragAndDrop(source, target).perform();

 

释放鼠标
release()方法用于释放鼠标事件。

 action1.release().perform();

 

4.5  键盘事件

使用键盘按键方法前需要先导入keys类。
以下为常用的键盘操作:
sendKeys(Keys.BACK_SPACE)     删除键(BackSpace)
sendKeys(Keys.SPACE)              空格键(Space)
sendKeys(Keys.TAB)                  制表键(Tab)
sendKeys(Keys.ESCAPE)            回退键(Esc)
sendKeys(Keys.ENTER)              回车键(Enter)
sendKeys(Keys.CONTROL,'a')   全选(Ctrl+A)

sendKeys(Keys.CONTROL,'c')   复制(Ctrl+C)
sendKeys(Keys.CONTROL,'x')   剪切(Ctrl+X)
sendKeys(Keys.CONTROL,'v')    粘贴(Ctrl+V)
sendKeys(Keys.F1)                    键盘F1
……
sendKeys(Keys.F12)                 键盘F12

package com.cy.selenium;

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

public class Test02 {
        public static void main(String[] args) {
             WebDriver driver=new FirefoxDriver();
             driver.manage().window().maximize();
             driver.get("http://www.baidu.com/");

             WebElement input =driver.findElement(By.id("kw"));
             // 输入内容
             input.sendKeys("seleniumm");
             // 删除多余的m
             input.sendKeys(Keys.BACK_SPACE);
             // 输入空格+教程
             input.sendKeys(Keys.SPACE);
             input.sendKeys("教程");

             // ctrl+a
             input.sendKeys(Keys.CONTROL,"a");

             // ctrl+x
             input.sendKeys(Keys.CONTROL,"x");

             // ctrl+v
             input.sendKeys(Keys.CONTROL,"v");

             // 通过回车键 查询
             input.sendKeys(Keys.ENTER);

             driver.close();

        }
}

 

 

4.6  获得验证信息

getTitle():用于获得当前页面的title。
getCurrentUrl() :用户获得当前页面的URL。

4.7  设置元素等待

4.7.1 timeouts方法

WebDriver提供了几种方法来等待元素。

·implicitlyWait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常。
·setScriptTimeout。异步脚本的超时时间。WebDriver可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。
·pageLoadTimeout。页面加载时的超时时间。因为WebDriver会等页面加载完毕再进行后面的操作,所以如果页面超过设置时间依然没有加载完成,那么WebDriver就会抛出异常

4.7.2 sleep休眠方法

Thread.sleep()方法

当执行到sleep()方法时会固定的休眠所设置的时长(这里以毫秒为单位);然后再继续执行。
注意,这里的Thread.sleep()方法不能直接使用,必须加上异常的处理。
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。  

package com.cy.selenium;

import java.util.concurrent.TimeUnit;

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

public class Wait {
  public static void main(String[] args) {
        WebDriver driver=new FirefoxDriver();
        driver.manage().window().maximize();
        //页面加载超时时间为5s
        driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);

        driver.get("http://www.baidu.com/");

         //定位对象时间5s,还没订到位置报异常
      driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.findElement(By.id("kww")).sendKeys("selenium");
        // Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"kww"}

        //异步脚本的超时时间为5s
      driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS);

      // Thread.sleep 需要异常处理
      try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

        driver.close();
}
}

 

时间: 2024-10-16 03:58:31

第4章&#160;Selenium2-java WebDriver API (一)的相关文章

《HTML5移动开发》—— 第1章 学习移动HTML5、CSS3和Java Script API之前的准备工作

第1章 学习移动HTML5.CSS3和Java Script API之前的准备工作 HTML5移动开发如果你跟我多少有点类似的话,你肯定已经痛恨旧版IE浏览器很多年了.那些浏览器满是失败.然而,它们在整个生命周期内在任何地方失败的方式是一样的[1].我们都知道IE6非常糟糕,但是它糟糕的方式是一样的.一旦我们搞清楚了如何填IE6的坑(polyfill[2]),我们就已经把它搞清楚了. 在移动世界,我们同样面临一些问题,不同的是这些问题以一种更新.更多样化且不断变化的方式存在.在不同设备上的不同浏

《Java数字图像处理:编程技巧与应用实践》——1.2 Java 2D API

1.2 Java 2D API 当Graphics向下转型为Grahpics2D时,Java 2D的图形绘制引擎得以访问,一个功能更加丰富的图形库呈现在读者眼前,它就是Java 2D API.如果你问笔者Java 2D与Swing有何关系,可以很认真地说,二者毫无瓜葛,Java通过引入Swing.Java 2D与Java 3D,极大地丰富了Java的图形功能,使应用程序接口更加完善,为各种可能的图形开发提供了可靠保证与全面支持,从而也使得学习Java图形方面的知识时不再那么无助了.下面来看一下J

第2章&amp;#160;Selenium2-java 测试环境搭建

    2.1  Window下环境搭建   2.1.1 安装Java   2.1.2 安装Eclipse   (网上资源很多,就不详将了).  2.1.3 下载Java版的Selenium包.  下载地址:http://docs.seleniumhq.org/download/   提供一下百度网盘下载地址: http://pan.baidu.com/share/link?shareid=1233226792&uk=375774229    2.1.4 创建第一个Java程序     ecli

全面挖掘Java Excel API 使用方法

excel 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件.这样只是说可以访问到Excel文件,但是还不能真正的操纵Ex

全面挖掘Java Excel API 使用方法(1)

excel 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件.这样只是说可以访问到Excel文件,但是还不能真正的操纵Ex

Java Servlet API说明文档(2.1a版)(一)

servlet 绪言 这是一份关于2.1版Java Servlet API的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载Javadoc格式的文档. 谁需要读这份文档 这份文档描述了Java Servlet API的最新版本2.1版.所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用. Java Servlet API的组成 Java Servlet API由两个软件包组成:一

Java Servlet API说明文档(2.1a版)(二)

servlet API对象的说明\r 这一部分包含了对Java Servlet API的全部类和接口的详细说明.这个说明与Javadoc API差不多,但是这份文档提供了更多的信息.API包含了两个软件包,十二个接口和九个类.软件包:javax.servlet 所包含的接口:RequestDispatcher:Servlet:ServletConfig:ServletContext:ServletRequest:ServletResponse:SingleThreadModel.所包含的类:Ge

Java Mail API及其应用 —— 一个邮件列表服务器的实现 (三)(转贴)

服务器|邮件列表 相关资源1.Java Mail API软件包下载(版本1.1.2) ftp://usmt.java.sun.com/pub/javamail/tyo39/javamail1_1_2.zip 缺省POP3实现软件包下载: ftp://usmt.java.sun.com/pub/javamial/tyo39/pop31_1.zip 以上文件也可以从Sun的Java Mail API主页下载 http://java.sun.com/products/javamail/ 2.JavaB

Java Mail API及其应用 —— 一个邮件列表服务器的实现 (二)(转贴)

服务器|邮件列表 邮件列表服务经常用于为工作组提供基于email的讨论环境,订阅者通过它讨论共同感兴趣的问题. 本文提供的示例程序ListServer是一个简单的邮件列表转发服务器:它从指定帐号读取新邮件并发送给所有订阅者.Java Mail API不仅使得实现其基本功能相当简单(使用缺省的POP3和SMTP),而且保证了程序易于支持任何可能遇到的系统环境. 运行该程序需要包含以下支持文件:Java Mail (mail.jar).JAF(activation.jar)以及缺省的POP3支持(p

Java Mail API及其应用 —— 一个邮件列表服务器的实现 (一)(转贴)

服务器|邮件列表 Java Mail API 是Sun开发的最新标准扩展API之一,它给Java应用程序开发者提供了独立于平台和协议的邮件/通讯解决方案.本文介绍该API的核心机制,并通过一个邮件转发服务器(邮件列表服务器)演示其具体用法. Java Mail API的开发是Sun为Java开发者提供公用API框架的持续努力的良好例证.提倡公用框架,反对受限于供应商的解决方案,充分预示着一个日益开放的开发环境的建立. 在email通讯领域,面向最终应用的开发者(以及用户)已经能够购买到最适合他们