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();
}
}

最新文章

  1. SpringMVC常用注解的用法
  2. java 为啥变量名前要加个m?
  3. Eclipse+Maven构建web项目及部署时Maven lib依赖问题的解决
  4. C#学习笔记8:HTML和CSS基础学习笔记
  5. html ul li 显示数据库
  6. day 04 list,元祖
  7. jQuery 获取url中的参数
  8. ES6 基础
  9. iOS电量获取
  10. 回收站(recyclebin)及回滚
  11. &#39;ascii&#39; codec can&#39;t encode characters in position 0-2: ordinal not in range(128)
  12. 【 js 基础 】【读书笔记】Javascript “继承”
  13. linux下时间有关的函数和结构体
  14. day8 python学习 集合 深浅拷贝
  15. python&amp;pandas 与mysql 连接
  16. 创建NuGet包
  17. A链接IE6、7下失效场景及解决方案
  18. 述一个程序员的技能:系统安装(win7版)idea配置
  19. PHP提取字符串中的手机号正则表达式怎么写
  20. python入门20 导入模块(引包)

热门文章

  1. Android开发——利用Cursor+CursorAdapter实现界面实时更新
  2. SpringMVC随笔之——@responsebody【引用snowolf博文】
  3. 分形之龙形曲线(Dragon Curve)
  4. 记录.NET Core在CentOS上基于Jenkins自动化发布
  5. Asp.Net Mvc异步上传文件的方式
  6. Linux 安装JavaEE环境之jdk安装笔记
  7. 异步三部曲之promise
  8. 浅谈ES6原生Promise
  9. iOS开发-自动隐藏键盘及状态栏
  10. Liferay开发实战(1):入门