第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();
}
}
第4章 Selenium2-java WebDriver API (一)的更多相关文章
- python+selenium自动化软件测试(第2章):WebDriver API
2.1 操作元素基本方法 前言前面已经把环境搭建好了,从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可 ...
- selenium2.0(WebDriver) API
1.1 下载selenium2.0的包 官方download包地址:http://code.google.com/p/selenium/downloads/list 官方User Guide: h ...
- selenium2(WebDriver) API
selenium2(WebDriver) API 作者:Glen.He出处:http://www.cnblogs.com/puresoul/ 1.1 下载selenium2.0的包 官方downl ...
- java JDK8 学习笔记——第11章 线程和并行API
第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...
- [selenium webdriver Java]常用api
1. 获取元素文本 WebElement类的getText()方法返回元素的innerText属性.所以元素里如果有子节点一样也会被返回出来.如下所示 public class GetText { @ ...
- Selenium2+Python:Webdriver API速记手册
由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需. 参考:虫师<Selenium2自动化测试实战>,和 ...
- webdriver API中文文档
1.1 下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGuide:http://seleniu ...
- Webdriver API中文版
Webdriver API中文版 1.1 下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGui ...
- Webdriver API (二)
(转载) 1.3 打开测试页面 对页面对测试,首先要打开被测试页面的地址(如:http://www.google.com),web driver 提供的get方法可以打开一个页面: // And no ...
- Java 面向对象编程——第一章 初识Java
第一章 初识Java 1. 什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...
随机推荐
- common.php
<?php /** * */ class Common { if(!function_exists('is_php')) { function is_php($version = '5.0.0' ...
- ASP.NET MVC IActionFilter IResultFilter IExceptionFilter/HandleError
一.IActionFilter 1.基本定义 在action的执行前后进行AOP拦截. IActionFilter接口定义如下: public interface IActionFilter { // ...
- 分形之谢尔宾斯基(Sierpinski)四面体
前面讲了谢尔宾斯基三角形,这一节的将对二维三角形扩展到三维,变成四面体.即将一个正四面体不停地拆分,每个正四面体可以拆分成四个小号的正四面体.由二维转变到三维实现起来麻烦了许多.三维的谢尔宾斯基四面体 ...
- fping常用参数介绍
fping的主要参数有以下两个: -a:只显示存活主机: -u:只显示不存活主机: -l:循环ping目标IP地址的输入方式: fping IP1 IP2 IP3 ...: fping -f file ...
- 【转】C#中dynamic的正确用法
原文:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynamic ...
- Ubuntu修改apt-get源
1.背景 服务器上安装了最新的Ubuntu Server 17.04,代号为zesty.使用apt-get命令安装软件时,有时候速度比较慢,有时候会失败.因此考虑用国内的镜像源更换下apt-get的默 ...
- Flask系列10-- Flask请求上下文源码分析
总览 一.基础准备. 1. local类 对于一个类,实例化得到它的对象后,如果开启多个线程对它的属性进行操作,会发现数据时不安全的 import time from threading import ...
- hash的安全性
在区块链中,我们面临着两个问题: 隐私问题 快速对账问题 由于区块链中,每个人都存在着一个账本,当一个人有收入的时候,将会进行广播到所有人的账本,例如张三收入xxx钱,这样子所有的账本才能同步更新.但 ...
- Java中goto和break、continue实现区别
goto 关键字很早就在程序设计语言中出现.事实上,goto 是汇编语言的程序控制结构的始祖:“若条件 A,则跳到这里:否则跳到那里”.若阅读由几乎所有编译器生成的汇编代码,就会发现程序控制里包含了许 ...
- 常用下载方式的区别-BT下载、磁力链接、电驴
出处:https://www.jianshu.com/p/72b7a64e5be1 打开 115 离线下载的窗口,看到支持这么多种链接,你都清楚他们是什么原理嘛?接下来我们一个一个说. 一.HTTP( ...