为Selenium自动化测试优雅的添加日志

 

在使用Selenium进行Web端UI自动化测试过程中,最让人头疼的就是脚本执行的稳定性。如何快速定位排查运行中产生的各种异常问题,详细记录每一步的操作日志是最有效的方法。

WebDriver事件监听器

本次实例中我们将使用EventFiringWebDriver 和 WebDriverEventListner来完成日志的添加。 EventFiringWebDriver 是一个类,包装了webdriver抛出的各种事件。 WebDriverEventListner 是一个接口,我们需要实现它来完成对webdriver的事件捕捉。

如何使用

第一步:实现Selenium WebDriver 事件监听接口

我们创建一个名为LogListener的类并实现了WebDriverEventListner接口

public class LogListener implements WebDriverEventListener {


public void beforeAlertAccept(WebDriver webDriver) {

}

public void afterAlertAccept(WebDriver webDriver) {

}

public void afterAlertDismiss(WebDriver webDriver) {

}

public void beforeAlertDismiss(WebDriver webDriver) {

}

public void beforeNavigateTo(String s, WebDriver webDriver) {

}

public void afterNavigateTo(String s, WebDriver webDriver) {

}

public void beforeNavigateBack(WebDriver webDriver) {

}

public void afterNavigateBack(WebDriver webDriver) {

}

public void beforeNavigateForward(WebDriver webDriver) {

}

public void afterNavigateForward(WebDriver webDriver) {

}

public void beforeNavigateRefresh(WebDriver webDriver) {

}

public void afterNavigateRefresh(WebDriver webDriver) {

}

public void beforeFindBy(By by, WebElement webElement, WebDriver webDriver) {

}

public void afterFindBy(By by, WebElement webElement, WebDriver webDriver) {
System.out.println("页面元素定位方法:"+by.toString());
}

public void beforeClickOn(WebElement webElement, WebDriver webDriver) {
System.out.println("点击页面元素:"+webElement.getAttribute("value"));

}

public void afterClickOn(WebElement webElement, WebDriver webDriver) {

}

public void beforeChangeValueOf(WebElement webElement, WebDriver webDriver, CharSequence[] charSequences) {

}

public void afterChangeValueOf(WebElement webElement, WebDriver webDriver, CharSequence[] charSequences) {
System.out.println("输入关键字:"+webElement.getAttribute("value"));


}

public void beforeScript(String s, WebDriver webDriver) {

}

public void afterScript(String s, WebDriver webDriver) {

}

public void onException(Throwable throwable, WebDriver webDriver) {

}
}

我们需要做的就是在这些方法中添加我们要输出记录的日志信息即可。上面实例中我用简单的print语句来打印了,使用的定位方法、点击的元素、输入的内容。你可以根据自己需求来添加更多的日志信息。

第二步:创建WebDriver

WebDriver driver = new InternetExplorerDriver();
EventFiringWebDriver evnetDriver = new EventFiringWebDriver(driver);
LogListener logListener = new LogListener();
eventDriver.register(logListener);

完整实例代码

import common.LogListener;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class SearchTest {


WebDriver driver;
EventFiringWebDriver eventDriver;

private String url = "http://www.baidu.com";

@BeforeClass
public void setUp() throws Exception{
System.setProperty("webdriver.ie.driver",System.getProperty("user.dir")+"\\driver\\IEDriverServer.exe");
WebDriver driver = new InternetExplorerDriver();
eventDriver = new EventFiringWebDriver(driver);
LogListener logListener = new LogListener();
eventDriver.register(logListener);
eventDriver.manage().window().maximize();
eventDriver.get(url);
Thread.sleep(3000);
}

@Test
public void testSearch() throws Exception{
//定位百度文本框 并输入搜索关键字
eventDriver.findElement(By.name("wd")).sendKeys("测试");
//定位百度一下按钮,并点击
eventDriver.findElement(By.id("su")).click();
//等待3秒
Thread.sleep(3000);
//获取页面标题
String titile = eventDriver.getTitle();
//输出页面标题
System.out.print("Page title is: " + eventDriver.getTitle());
//验证页面标题中是否包含测试关键字
Assert.assertTrue(titile.contains("测试"));
}

@AfterClass
public void tearDown(){
eventDriver.quit();
}

}

日志效果

为Selenium自动化测试优雅的添加日志_第1张图片

你可能感兴趣的:(自动化测试)