com.cognifide.qa.bb.logging.WebDriverLogger.java Source code

Java tutorial

Introduction

Here is the source code for com.cognifide.qa.bb.logging.WebDriverLogger.java

Source

/*-
 * #%L
 * Bobcat
 * %%
 * Copyright (C) 2016 Cognifide Ltd.
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */
package com.cognifide.qa.bb.logging;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.WebDriverEventListener;

import com.google.inject.Inject;

/**
 * This class listens for webDriver events and registers them in TestEventCollector.
 * Bobcat users should not create instances of this class manually.
 * Reporting module will create them itself.
 */
public class WebDriverLogger implements WebDriverEventListener {

    @Inject
    private TestEventCollectorImpl eventCollector;

    private String event;

    private String parameter;

    private long startTime;

    private void beforeEvent(String name) {
        beforeEvent(name, null);
    }

    private void beforeEvent(String name, String parameter) {
        this.event = name;
        this.parameter = parameter;
        this.startTime = System.currentTimeMillis();
    }

    private void afterEvent() {
        long duration = System.currentTimeMillis() - startTime;
        eventCollector.event(event, parameter, duration);
    }

    private void afterEvent(String parameter) {
        this.parameter += parameter;
        afterEvent();
    }

    @Override
    public void beforeAlertAccept(WebDriver webDriver) {
        beforeEvent("alertAccept");
    }

    @Override
    public void afterAlertAccept(WebDriver webDriver) {
        afterEvent();
    }

    @Override
    public void afterAlertDismiss(WebDriver webDriver) {
        afterEvent();
    }

    @Override
    public void beforeAlertDismiss(WebDriver webDriver) {
        beforeEvent("alertDismiss");
    }

    @Override
    public void beforeNavigateTo(String url, WebDriver driver) {
        beforeEvent("navigateTo", url);
    }

    @Override
    public void afterNavigateTo(String url, WebDriver driver) {
        afterEvent();
    }

    @Override
    public void beforeNavigateBack(WebDriver driver) {
        beforeEvent("navigateBack");
    }

    @Override
    public void afterNavigateBack(WebDriver driver) {
        afterEvent();
    }

    @Override
    public void beforeNavigateForward(WebDriver driver) {
        beforeEvent("navigateForward");
    }

    @Override
    public void afterNavigateForward(WebDriver driver) {
        afterEvent();
    }

    @Override
    public void beforeFindBy(By by, WebElement element, WebDriver driver) {
        beforeEvent("findBy", fetchParameter(by, element));
    }

    private String fetchParameter(By by, WebElement element) {
        if (element == null) {
            return by.toString();
        } else {
            beforeEvent("findBy", by.toString());
            return String.format("%s -> %s", element.toString(), by.toString());
        }
    }

    @Override
    public void afterFindBy(By by, WebElement element, WebDriver driver) {
        afterEvent();
    }

    @Override
    public void beforeClickOn(WebElement element, WebDriver driver) {
        beforeEvent("click", element.toString());
    }

    @Override
    public void afterClickOn(WebElement element, WebDriver driver) {
        afterEvent();
    }

    @Override
    public void beforeChangeValueOf(WebElement element, WebDriver driver, CharSequence[] keysToSend) {
        StringBuilder sb = new StringBuilder();
        sb.append(element.toString());
        sb.append(" value: [");
        sb.append(element.getAttribute("value"));
        sb.append("] -> [");
        beforeEvent("changeValue", sb.toString());
    }

    @Override
    public void afterChangeValueOf(WebElement element, WebDriver driver, CharSequence[] keysToSend) {
        afterEvent(element.getAttribute("value") + "]");
    }

    @Override
    public void beforeScript(String script, WebDriver driver) {
        beforeEvent("executeJs", script);
    }

    @Override
    public void afterScript(String script, WebDriver driver) {
        afterEvent();
    }

    @Override
    public void onException(Throwable throwable, WebDriver driver) {
        // empty as we have a lot of selenium exceptions that are expected
        // we don't want to have them in report
    }

    @Override
    public void beforeNavigateRefresh(WebDriver driver) {
        beforeEvent("navigate().refresh()");
    }

    @Override
    public void afterNavigateRefresh(WebDriver driver) {
        afterEvent();
    }
}