selenium2.0的初步封装(java版本)
2015-08-22 21:12
525 查看
我们都知道, 在本地创建java项目后,引入selenium-java-2.35.0.jar selenium-support-2.35.0.jar junit-4.8.1.jar等等jar包之后,(或者创建Java maven项目,在pom.xml的<dependency></dependency>中添加依附, Maven可以或许主动响应版本的jar包), 之后, 就可以在本地开辟selenium主动化脚本
在完全没有封装的景象下, 一般的次序是:
1)获得浏览器驱动:
WebDriver driver=new FirefoxDriver();
2)经由过程WebDriver供给的办法打开网页:
driver.get("urlString"); 或者 driver.navigate.to("urlString")
3)经由过程driver.findElement(By.***)找到元素
找元素的过程, 须要做守候处理惩罚, 可以用Thread.sleep(), 然而为了进步脚本的效力和结实性, 一般不采取这种守候体式格式,可以经由过程采取 WebDriverWait类+ExpectedConditions接口体式格式来灵活守候元素呈现,具体处理惩罚可以见“selenium1.0和selenium2.0页面守候处理惩罚详解”
4)对元素进行操纵
上方步调3获得元素WebElement,经由过程WebElement供给的办法, 对元素进行操纵(click()/sendKeys()/submit()/getText())等等
5)经由过程打开页面、找元素、守候元素、对元素操纵等一系列模仿工钱动作后,第5步就须要做真正要测试的目标,即搜检操纵后的成果
比如, 验证某个元素是否呈现, 验证是否输出正确的成果, 此时的步调可所以试图去找元素,待 wait.until()抛异常后, 还是没找到元素的话, 断定为该元素不存在。 在验证输出成果时,反复上述3) 4) 5)步调取出元素, 再经由过程if String.contains() 或者String.equals()来断定输出成果
显然, 上述是斗劲繁琐的过程, 写出来的脚本, 也会呈现很多冗余的雷同操纵代码,如许的脚本,保护起来吃力, 下面,将对上方的过程做一个小小封装, 如许可以只调用一个办法, 就可以完成 “查找/守候/操纵元素” 、 “查找/守候/断定元素是否存在” 或者 “查找/守候/断定输出内容” 等等
1、
设定容许最长的守候时候:
WebDriverWait wait=new WebDriverWait(driver, 10);
2、查找元素是否存在的过程,放在一个类里面
3、进行简单封装成办法供调用
4、有了这些办法后,再持续这些办法地点的类, 就可以轻松调用啦~
PS:
别的,还有其他一些 “查找/守候/操纵元素” 、 “查找/守候/断定输出内容” 等等,思路基****同, 下面再供给一些封装体式格式的完全源码:
以上只是小我的一点封装思路,其他有此外更好封装规划, 请指教^_^
在完全没有封装的景象下, 一般的次序是:
1)获得浏览器驱动:
WebDriver driver=new FirefoxDriver();
2)经由过程WebDriver供给的办法打开网页:
driver.get("urlString"); 或者 driver.navigate.to("urlString")
3)经由过程driver.findElement(By.***)找到元素
找元素的过程, 须要做守候处理惩罚, 可以用Thread.sleep(), 然而为了进步脚本的效力和结实性, 一般不采取这种守候体式格式,可以经由过程采取 WebDriverWait类+ExpectedConditions接口体式格式来灵活守候元素呈现,具体处理惩罚可以见“selenium1.0和selenium2.0页面守候处理惩罚详解”
4)对元素进行操纵
上方步调3获得元素WebElement,经由过程WebElement供给的办法, 对元素进行操纵(click()/sendKeys()/submit()/getText())等等
5)经由过程打开页面、找元素、守候元素、对元素操纵等一系列模仿工钱动作后,第5步就须要做真正要测试的目标,即搜检操纵后的成果
比如, 验证某个元素是否呈现, 验证是否输出正确的成果, 此时的步调可所以试图去找元素,待 wait.until()抛异常后, 还是没找到元素的话, 断定为该元素不存在。 在验证输出成果时,反复上述3) 4) 5)步调取出元素, 再经由过程if String.contains() 或者String.equals()来断定输出成果
显然, 上述是斗劲繁琐的过程, 写出来的脚本, 也会呈现很多冗余的雷同操纵代码,如许的脚本,保护起来吃力, 下面,将对上方的过程做一个小小封装, 如许可以只调用一个办法, 就可以完成 “查找/守候/操纵元素” 、 “查找/守候/断定元素是否存在” 或者 “查找/守候/断定输出内容” 等等
1、
设定容许最长的守候时候:
WebDriverWait wait=new WebDriverWait(driver, 10);
2、查找元素是否存在的过程,放在一个类里面
class ElementExistOrNot implements Function<WebDriver, Boolean>{//第一个参数为apply办法的参数类型,第二个参数为apply办法的返回类型 private By by; private String sign; public ElementExistOrNot(By by, String sign) { this.by = by; this.sign = sign; } @Override public Boolean apply(WebDriver driver) { try{ WebElement e=driver.findElement(by); if(sign.equals("yes")){ return true; }else{ return false; } }catch (Exception e){ if(sign.equals("yes")){ return false; }else{ return true; } } } }
3、进行简单封装成办法供调用
//完成对元素的 ”查找+守候+验证存在性“ 的封装 public void waitUntilElementExist(By by){ ElementExistOrNot isTrue=new ElementExistOrNot(by, "yes"); try{ wait.until(isTrue); }catch (Exception e){ fail("Element [" + by + "] should presents!"); } }
4、有了这些办法后,再持续这些办法地点的类, 就可以轻松调用啦~
PS:
别的,还有其他一些 “查找/守候/操纵元素” 、 “查找/守候/断定输出内容” 等等,思路基****同, 下面再供给一些封装体式格式的完全源码:
package com.jennifer.functiontest;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.google.common.base.Function;
public class jenniferBase extends Assert {
protected WebDriver driver;
protected WebDriverWait wait;
@Before
public void init(){
driver=new FirefoxDriver();
wait=new WebDriverWait(driver, 10);
}
//获得带有守候机制的WebElement(对“找元素+守候”的封装)
public WebElement e(By by){
try{
waitUntilElementExist(by);
return driver.findElement(by);
}catch (Exception e) {
fail("Can""t find element: ["+by+"]");
}
return null;
}
//完成对元素的“查找+守候(直到元素存在)+验证+点击 操纵”的封装
public void clickAndWait(By by){
e(by).click();
}
//完成对元素的 ”查找+守候+验证存在性“ 的封装 public void waitUntilElementExist(By by){ ElementExistOrNot isTrue=new ElementExistOrNot(by, "yes"); try{ wait.until(isTrue); }catch (Exception e){ fail("Element [" + by + "] should presents!"); } }
//完成对元素的“查找+守候+验证不存在性”的封装
public void waitUntilElementNotExist(By by){
ElementExistOrNot isTrue=new ElementExistOrNot(by, "no");
try{
wait.until(isTrue);
}catch (Exception e) {
fail("Element [" + by + "] should not presents!");
}
}
//完成对元素的“查找+守候+验证其text存在性”的封装
public void waitUntilElementEqualsText(By by,String s){
waitUntilElementExist(by);
ElementEqualsOrNot isTrue=new ElementEqualsOrNot(by, "yes", s, "text");
try{
wait.until(isTrue);
}catch (Exception e) {
fail("Element ["+by+"] text should equals"+s+"but not it equals"+e(by).getText());
}
}
//完成对元素的“查找+守候+验证其value存在性”的封装
public void waitUntilElementEqualsValue(By by,String s){
waitUntilElementExist(by);
ElementEqualsOrNot isTrue=new ElementEqualsOrNot(by, "yes", s, "value");
try{
wait.until(isTrue);
}catch (Exception e) {
fail("Element ["+by+"] value should equals:"+s+"but not it equals:"+e(by).getValue());
}
}
@After
public void tearDown(){
driver.quit();
}
}
class ElementExistOrNot implements Function<WebDriver, Boolean>{//第一个参数为apply办法的参数类型,第二个参数为apply办法的返回类型 private By by; private String sign; public ElementExistOrNot(By by, String sign) { this.by = by; this.sign = sign; } @Override public Boolean apply(WebDriver driver) { try{ WebElement e=driver.findElement(by); if(sign.equals("yes")){ return true; }else{ return false; } }catch (Exception e){ if(sign.equals("yes")){ return false; }else{ return true; } } } }
class ElementEqualsOrNot implements Function<WebDriver,Boolean>{
private By by;
private String sign;
private String s;
private String textOrValue;
public ElementEqualsOrNot(By by, String sign, String s, String textOrValue) {
this.by = by;
this.sign = sign;
this.s = s;
this.textOrValue = textOrValue;
}
@Override
public Boolean apply(WebDriver driver) {
WebElement e=driver.findElement(by);
if(sign.equals("yes")){ //断定存在性
if(textOrValue.equals("text")){ //断定text的存在性
return e.getText().equals(s);
}else{ //断定value的存在性
return e.getValue().equals(s);
}
}else{//断定不存在性
if(textOrValue.equals("text")){
return !e.getText().equals(s);
}else{
return !e.getValue().equals(s);
}
}
}
}
以上只是小我的一点封装思路,其他有此外更好封装规划, 请指教^_^
相关文章推荐
- Struts2学习(一)建立项目需注意问题
- java中println与print的区别,以及print字符输出
- spring类扫描器
- java通过抛异常来返回提示信息
- 解析Java反射java.lang.IllegalArgumentException: wrong number of arguments
- Java 实现PAT乙级(Basic Level)1001-1010 解题报告(一)
- Java中的正则表达式
- Java中的正则表达式
- 使用Eclipse查看java源码
- java中string与json互相转化
- java file 删除目录下无用的文件
- spring 注解
- Exception in thread " " java.lang.UnsupportedClassVersionError: 错误
- Eclipse创建Struts项目
- Java------类加载机制
- Java- 对象清楚与垃圾回收
- Java Map接口Properties
- Java生成CSV文件
- Java字符串操作、基本运算方法等优化策略
- Java 注解的简单学习与应用 Annotation