使用selenium监听每一步操作
1.创建类LogEventListener.java, 如下:
package com.demo; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.WebDriverEventListener; /**
* 用一个类扩展web driver自带的事件监听器,可以实现许多有趣的功能。
* 比如自动log
* a customer event listener
*/
public class LogEventListener implements WebDriverEventListener { public void beforeNavigateTo(String url, WebDriver driver) {
System.out.println("转向前URL: '" + url + "'");
} public void afterNavigateTo(String url, WebDriver driver) {
System.out.println("转向后URL:'" + url + "'");
} public void beforeChangeValueOf(WebElement element, WebDriver driver) {
System.out.println("Value of the:" + element.toString()
+ " before any changes made");
} public void afterChangeValueOf(WebElement element, WebDriver driver) {
System.out.println("Element value changed to: " + element.toString());
} public void beforeClickOn(WebElement element, WebDriver driver) {
System.out.println("试图单击对象: " + element.toString());
} public void afterClickOn(WebElement element, WebDriver driver) {
System.out.println("单击对象: " + element.toString());
} public void beforeNavigateBack(WebDriver driver) {
System.out.println("Navigating back to previous page");
} public void afterNavigateBack(WebDriver driver) {
System.out.println("Navigated back to previous page");
} public void beforeNavigateForward(WebDriver driver) {
System.out.println("Navigating forward to next page");
} public void afterNavigateForward(WebDriver driver) {
System.out.println("Navigated forward to next page");
} public void onException(Throwable error, WebDriver driver) {
System.out.println("Exception occured: " + error);
} public void beforeFindBy(By by, WebElement element, WebDriver driver) {
System.out.println("试图寻找对象 : " + by.toString());
} public void afterFindBy(By by, WebElement element, WebDriver driver) {
System.out.println("找到对象 : " + by.toString());
} /*
* non overridden methods of WebListener class
*/
public void beforeScript(String script, WebDriver driver) {
} public void afterScript(String script, WebDriver driver) {
} @Override
public void afterChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence[] arg2) {
// TODO Auto-generated method stub } @Override
public void afterNavigateRefresh(WebDriver arg0) {
// TODO Auto-generated method stub } @Override
public void beforeChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence[] arg2) {
// TODO Auto-generated method stub } @Override
public void beforeNavigateRefresh(WebDriver arg0) {
// TODO Auto-generated method stub } }
2.在创建WebEventListener监听类,如下:
package com.demo; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.AbstractWebDriverEventListener; public class WebEventListener extends AbstractWebDriverEventListener { public void beforeNavigateTo(String url, WebDriver driver) {
System.out.println("打开前url: '" + url + "'");
} public void afterNavigateTo(String url, WebDriver driver) {
System.out.println("打开url:'" + url + "'");
} public void beforeClickOn(WebElement element, WebDriver driver) {
System.out.println("试图单击对象: " + element.toString());
} public void afterClickOn(WebElement element, WebDriver driver) {
System.out.println("单击对象: " + element.toString());
} public void onException(Throwable error, WebDriver driver) {
System.out.println("Error occurred: " + error);
}
}
3.使用监听,如下:
package com.demo; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; public class ListenerTest { private WebDriver driver;
private EventFiringWebDriver e_driver;
private WebEventListener eventListener;
private WebDriverWait wait;
private String appURL = "http://www.google.com";
public int waitTime = 10;
private String headerText = "One account. All of Google.";
private String errMessage = "The email and password you entered don't match."; @BeforeClass()
public void setUp() { driver = new FirefoxDriver();
wait = new WebDriverWait(driver, waitTime); e_driver = new EventFiringWebDriver(driver); eventListener = new WebEventListener();
e_driver.register(eventListener); e_driver.manage().window().maximize();
e_driver.get(appURL);
} @Test
public void testEventsONE() {
System.out.println("***** Executing Test ONE ***** ");
e_driver.findElement(By.linkText("Gmail")).click();
String pageHeaderText = e_driver.findElement(By.tagName("h1")).getText();
Assert.assertTrue(pageHeaderText.equalsIgnoreCase(headerText));
} @Test
public void testEventsTWO() {
System.out.println("***** Executing Test Two ***** ");
e_driver.findElement(By.id("Email")).sendKeys("username");
e_driver.findElement(By.id("next")).click(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));
e_driver.findElement(By.id("Passwd")).sendKeys("password");
e_driver.findElement(By.id("signIn")).click(); String pageHeaderText = e_driver.findElement(By.id("errormsg_0_Passwd")).getText();
Assert.assertTrue(pageHeaderText.equalsIgnoreCase(errMessage));
} @AfterClass()
public void tearDown() {
if (e_driver != null) {
e_driver.quit();
}
} }
运行查看控制台打印的信息
使用selenium监听每一步操作的更多相关文章
- Android View转为图片保存为本地文件,异步监听回调操作结果;
把手机上的一个View或ViewGroup转为Bitmap,再把Bitmap保存为.png格式的图片: 由于View转Bitmap.和Bitmap转图片都是耗时操作,(生成一个1M的图片大约500ms ...
- 实时监听 mysql 操作,Linux 版
效果 场景:某数据库新增了某条记录,服务器可以监听到变化的数据与操作,如 增加一条记录: id = 1009,name=''test,number = 11 服务器监听结果: 实现过程 测试过程:数据 ...
- Jquery系列:checkbox 获取值、选中、设置值、事件监听等操作
<div id="divId" class="divTable"> <div class="tableBody"> ...
- C#WinForm窗体监听/拦截操作动作
C#中的事件也是通过封装系统消息来实现的,如果你在WndProc函数中不处理该消息 那么,它会被交给系统来处理该消息,系统便会通过代理来实现鼠标单击的处理函数,因此你可以通过 WndProc函数来拦截 ...
- NSOperation操作依赖和监听
1.操作依赖 NSOperation之间可以设置依赖来保证执行顺序 比如一定要让操作A执行完后,才能执行操作B,可以这么写 [operationB addDependency:operationA]; ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- SD卡的监听
摘要:在一般应用中,如果需要对占用空间比较大的文件操作,需要监听SD卡的状态,Android中对SD卡的监听状态操作步骤如下: 一.创建一个类继承于BroadcastReceiver public c ...
- Android的事件处理机制详解(二)-----基于监听的事件处理机制
基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...
- Servlet的监听
Servlet监听 在<Servlet和Jsp>中我们使用了ServletConfig获取Servlet的初始配置,用ServletContext来获取整个Web应用的初始配置,但如果需要 ...
随机推荐
- MYSQL忘记超级用户密码修改
#service mysql stop #mysqld_safe --skip-grant-tables 另外开个SSH连接或终端 [root@localhost ~]# mysql mysql> ...
- IOS 封装View的fram(X Y W H )
@interface UIView (Extension) @property (nonatomic, assign) CGFloat x; @property (nonatomic, assign) ...
- 【BZOJ1269】[AHOI2006] 文本编辑器editor(Splay)
点此看题面 大致题意: 让你维护一个字符串,有插入字符串.删除区间.反转区间和输出单个字符操作. \(Splay\) 这应该是一道比较简单的\(Splay\)题(虽然因为各种细节我调了很久). 我们可 ...
- 7 MSSQL数据库备份与恢复
0 MSSQL数据库备份 1 SQLAgent配置 2 设置连接属性 3 输入SA账号密码 4 SQL备份脚本配置 5 生成SQL全量备份脚本 6 生成SQL差异备份脚本 7 修改SQL差异备份脚本 ...
- Mysql limit 优化,百万至千万级快速分页,--复合索引的引用并应用于轻量级框架
MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心!MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻 ...
- runit git-daemon-run 等错误
正在处理用于 man-db (2.7.5-1) 的触发器 ... 正在设置 runit (2.1.2-3ubuntu1) ... start: 无法连接到 Upstart: Failed to con ...
- JAVA_Converter_字符串类型转Date类型
我们知道数据库中的时间一般为Date类型,而前台传递过来的为字符串,BeanUtils在封装数据的时候,没有将类型转换,导致报异常... 我们只需要在封装数据之前,使用自定义转换器即可: 代码如下: ...
- Oracle AWR快照管理与常见问题
1.手动创建Snapshots exec dbms_workload_repository.create_snapshot(); OR BEGIN DBMS_WORKLOAD_REPOSITORY.C ...
- ssh框架复习
1.Hibernate中实体类的创建规则是什么? 2.hibernate中实体类的三种状态? 三种状态: 1. new 出来一个新对象 TakeTime takeTime = new TakeTime ...
- C++ 类型转换(conv.)
隐式类型转换 总结自:隐式类型转换&算数运算符 定义:隐式类型转换是指使用了与表达式规定或当前语境不相符的类型时所进行的类型转换,但是要注意,可能会存在转换出现歧义,从而无法通过编译;一切带有 ...