入住 CI 中国社区 登录
CodeIgniter 中国开发者社区 返回首页

rosemarry的个人空间 https://codeigniter.org.cn/forums/?39678 [收藏] [复制] [分享] [RSS]

日志

Selenium——Timeouts()

已有 1157 次阅读2015-9-15 11:44 |个人分类:Selenium

Timeouts()方法会获得Timeouts对象,Timeouts对象包含以下3个方法。

ImplicitlyWait(),设置脚本在查找元素时的最大等待时间,例如Findelement()和Find Elemets()等方法的超时时间。

SetPageLoadTimeout():页面操作超时时间,例如页面进行跳转或刷新的最大等待时间。例如:使用Navigation 对象的各个方法,以及在页面执行某操作后发生跳转或刷新

SetScriptTimeout(),设置脚本异步执行的超时时间。

示例:

    WebDriver driver = new FirefoxDriver();

    Timeouts timeouts =driver.manage().timeouts();

    //将脚本在查找元素时的最大等待时间设置为30s

    timeouts.implicitlyWait(30,java.util.concurrent.TimeUnit.SECONDS);

    //将页面跳转或刷新的超时时间设置为30s

    timeouts.pageLoadTimeout(30,java.util.concurrent.TimeUnit.SECONDS);

   //将脚本异步执行的超时时间设置为30s

    timeouts.setScriptTimeout(30,java.util.concurrent.TimeUnit.SECONDS);

为测试操作添加事件:

       如果想要在执行测试操作时执行自定义的处理或者进行截图,可以适用EventFiring-WebDriver。它可以为各个操作添加事件,并能对测试进行截图。

     假如现在要对各类操作执行以下自定义处理。

     1、在执行打开网页的操作时,需要分别记录打开前和打开后的URL地址。

     2、在查找某个页面元素时,查找之前和之后都需要记录查找条件。

     3、在对页面元素进行单击操作时,单击前需要记录元素的查找条件,单击后记录URL地址

     4、在对页面元素的值进行更改时,需要分别记录更改前的值和更改后的值。

     5、在发生异常的时候需要进行截图,将截图文件保存至D:\,用当前日期命令截图文件。

要实现以上的自定义处理,可以通过EventFiringWebDriver轻松实现。

   在Java中,可以通过下面的方式来实例化EventFiringWebDriver对象

WebDriver driver = new FireDriver();

org.openqa.selenium.support.events.EventFiringWebDriver eventDriver = new org.openqa.selenium.support.events.EventFiringWebDriver(diver)

以下事件的作用:

beforeNavigate To:导航前事件,定义页面在发生跳转前需要执行的代码。

afterNavigate To:导航后事件,定义页面在发生跳转后需要执行的代码。

beforeNavigateBack:浏览器后退事件,定义浏览器在执行后退操作前需要执行的代码。

afterNavigateBack:浏览器后退后事件,定义浏览器在执行后退操作后需要执行的代码。

beforNavigateForward:浏览器前进前事件,定义浏览器在执行前进操作前需要执行的代码。

afterNavigateForward:浏览器前进后事件,定义浏览器在执行前进行操作后需要执行的代码。

beforFindBy:查找元素前事件,定义Selenium在查找元素前需要执行的代码。

afterFindBy:找到元素后事件,定义Selenium在找到元素后需要执行的代码。

beforeClickOn:单击元素前事件,定义Selenium在单击元素前需要执行的代码。

afterClickOn:单击元素后事件,定义Selenium在单击元素后需要执行的代码。

beforeChangeValueOf:元素值变更前事件,定义Selenium更改元素的值前需要执行的代码。

afterChangeValueOf:元素值变更后事件,定义Selenium更改元素的值后需要执行的代码。

beforeScript:脚本执行前事件,定义脚本执行前需要执行的代码。

afterScript:脚本执行后事件,定义脚本执行后需要执行的代码。

onException:异常事件,定义在使用Selenium测试发生异常时需要执行的代码。

程序片段:

   package Project1;

import org.openqa.selenium.*;

import org.openqa.selenium.WebDriver.*;

import org.openqa.selenium.firefox.*;

public class Project1{

  public static void main(String[] args){

   //如果启动出现问题,可以使用System.setProperty指出firefox.exe的路径

 //System.setProperty("webdriver.firefox.bin","D:\\Program Files(x86)\\Mozilla Firefox\\firefox.exe");

  WebDriver driver = newFirefoxDriver();

   org.openqa.selenium.support.events.EventFiringWebDriver eventDriver = new org.openqa.selenium.support.events.EventFiringWebDriver(driver);

  //注册事件

  eventDriver.register(new MyWebDriverListener());

  //打开百度页面

  eventDriver.navigate().to(http://www.baidu.com);

 //在搜索框中输入Selenium

 eventDriver.findElement(By.id("kw")).sendKeys("selenium");

 //单击搜索

 eventDriver.findElement(By.id("su")).click();

  //故意写一个错误操作,使selenium产生一场

 try

{

   eventDriver.findElement(By.id("XXX"));

}

catch(Exception e){}

}

}

-----------------------------MyWebDriverListener.java文件-----------------------------------------------------------------------------------------------------------------

package Project1;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

public class MyWebDriverListener implements org.openqa.selenium.support.events.WebDriverEventListener{

   @override

  public void beforeNavigateTo(String url,WebDriver driver)

{

   System.out.println("页面在发生跳转前的Url为:"+driver.getCurrentUrl());

}

@Override

public void afterNavigateTo(String url,WebDriver driver){

  System.out.println("页面在发生跳转后的Url为:"+driver.getCurrentUrl());

}

@Override

public void beforeNavigateBack(WebDriver driver){}

@Override

public void afterNavigateBack(WebDriver driver){}

@Override

public void beforeNavigateForward(WebDriver driver){}

@Override

public void afterNavigateForward(WebDriver driver){}

@Override

public void beforeFindBy(By by,WebElement element,WebDriver driver){

 System.out.println("查找元素时的条件为:"+by.toString());

}

@Override

public void afterFindBy(By by,WebElement element,WebDriver driver){

  System.out.println("找到元素,其条件为:"+by.toString());

}

@Override

 public void beforeClickOn(WebElement element,WebDriver driver){

  System.out.println("要单击的页面元素为:"+element.getAttribute("value"));

@Override
 public void afterClickOn(WebElement element,WebDriver driver){
  
  try{
   Thread.sleep(4000);
  }
  catch(Exception e)
  {
   e.printStackTrace();
      }
  System.out.println("单击页面元素后的Url为:"+driver.getCurrentUrl());
 }
 @Override
 public void beforeChangeValueOf(WebElement element,WebDriver driver){
  
  System.out.println("更改前的值为:"+element.getAttribute("value"));
 }
 @Override
 public void afterChangeValueOf(WebElement element,WebDriver driver){
  
  System.out.println("更改后的值为:"+element.getAttribute("value"));
 }
 @Override
 public void beforeScript(String script,WebDriver driver){}
 @Override
 public void afterScript(String script,WebDriver driver){}
 @Override
 public void onException(Throwable throwable,WebDriver driver)
 {
  java.util.Date currentTime = new java.util.Date();
  java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy_MM_dd_hh_mm_ss");
  String dateString = formatter.format(currentTime);
  java.io.File scrFile = ((org.openqa.selenium.TakesScreenshot)driver).getScreenshotAs(org.openqa.selenium.OutputType.FILE);
  try{
   java.io.File screenshot = new java.io.File("D:\\"+dateString+".png");
  }
  catch(Exception e){
   e.printStackTrace();
  }
  System.out.println("发生异常,原因为:"+throwable.getMessage());
  System.out.println("截图已保存至:"+"d:\\"+dateString+".png");
 }
}


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 入住 CI 中国社区