/* * $Id: ValidPageAspect.java 102464 2013-08-21 15:35:16Z nahlikm1 $ * * Copyright (c) 2010 AspectWorks, spol. s r.o. */ package com.pageobject.component; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.pageobject.controller.BrowserController; /** * Aspect checking page validity before every method call on a page. * * @author Pavel Muller * @version $Revision: 102464 $ */ @Aspect public class ValidPageAspect { private static Logger logger = LoggerFactory.getLogger(ValidPageAspect.class); private BrowserController browser; /** * Browser. * @param browser BrowserController that should be used. */ @Autowired public void setBrowserController(BrowserController browser) { this.browser = browser; } /** * Check if the browser is on page which method is being called. * * @param joinPoint current method call * @param page target page being called */ @Before("@target(component.Page) && target(page))") public void validatePage(JoinPoint joinPoint, AbstractPage page) { LoggerFactory.getLogger(page.getClass()).debug("Invocation of page method '{}'", joinPoint.getSignature().getName()); if (!page.isValidPage()) { String pageMethod = page.getClass().getSimpleName() + "." + joinPoint.getSignature().getName(); String msg = "Browser state is invalid while calling page method '" + pageMethod + "'. Current window title is: " + browser.getTitle(); logger.error(msg); throw new IllegalStateException(msg); } } }