All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.arquillian.graphene.spi.configuration.GrapheneConfiguration Maven / Gradle / Ivy

There is a newer version: 3.0.0-alpha.4
Show newest version
/**
 * JBoss, Home of Professional Open Source
 * Copyright 2013, Red Hat, Inc. and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.jboss.arquillian.graphene.spi.configuration;

import java.lang.annotation.Annotation;
import java.net.MalformedURLException;
import java.net.URL;

import org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor;
import org.jboss.arquillian.drone.configuration.ConfigurationMapper;
import org.jboss.arquillian.drone.spi.DroneConfiguration;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
 * 

* Graphene configuration can be defined in arquillian.xml or system properties. *

* *

System Properties

* *
 * -Darq.extension.webdriver.waitAjaxInterval=3
 * 
* *

arquillian.xml configuration

* *
 * <arquillian>
 *   <extension qualifier="graphene">
 *     <property name="waitAjaxInterval">3</property>
 *   </extension>
 * </arquillian>
 * 
* * @author Jan Papousek */ public class GrapheneConfiguration implements DroneConfiguration { private long waitAjaxInterval = 2; private long waitGuiInterval = 1; private long waitModelInterval = 5; private long waitGuardInterval = waitAjaxInterval; private long javascriptInstallationLimit = 5; private String defaultElementLocatingStrategy = How.ID_OR_NAME.toString().toLowerCase(); private String scheme = null; private String url = null; /** * Specifies default location strategy when no parameter is given to {@link FindBy} annotated injection point. */ public How getDefaultElementLocatingStrategy() { return How.valueOf(defaultElementLocatingStrategy.toUpperCase()); } /** * Get a default internal for waiting for AJAX operations. */ public long getWaitAjaxInterval() { return waitAjaxInterval; } /** * Get a default internal for waiting for Request Guards */ public long getWaitGuardInterval() { return waitGuardInterval; } /** * Get a default internal for waiting for GUI operations. */ public long getWaitGuiInterval() { return waitGuiInterval; } /** * Get a default internal for waiting for time-consuming, typically server-side operations. */ public long getWaitModelInterval() { return waitModelInterval; } /** * How long should Graphene wait before it fails to install a JavaScript extension into a page. */ public long getJavascriptInstallationLimit() { return javascriptInstallationLimit; } /** * Default scheme to use for every Location annotation. Use FQCN of scheme to use. */ public String getScheme() { return scheme; } /** * default url when container would inject null value to ArquillianResource otherwise */ public String getUrl() { return url; } /** * Validates that configuration is correct */ public void validate() { if (waitAjaxInterval <= 0) { throw new IllegalArgumentException("The waitAjaxInterval property has to be a positive number."); } if (waitGuiInterval <= 0) { throw new IllegalArgumentException("The waitGuiInterval property has to be a positive number."); } if (waitModelInterval <= 0) { throw new IllegalArgumentException("The waitModelInterval property has to be a positive number."); } if (waitGuardInterval <= 0) { throw new IllegalArgumentException("The waitGuardInterval property has to be a positive number."); } if (javascriptInstallationLimit <= 0) { throw new IllegalArgumentException("The javascriptInstallationLimut property has to a positive number."); } if (scheme != null && scheme.isEmpty()) { throw new IllegalArgumentException("The scheme property has to be a non-empty string."); } if (url != null && !canConstructURL(url)) { throw new IllegalArgumentException("The custom url you provided is not valid url address: " + url); } try { How.valueOf(defaultElementLocatingStrategy.toUpperCase()); } catch (IllegalArgumentException ex) { String values = ""; for (How value : How.values()) { values += value.toString().toLowerCase() + ", "; } throw new IllegalArgumentException("The defaultElementLocatingStrategy property has to be one of the: " + values + " and was: " + ((defaultElementLocatingStrategy.length() != 0) ? defaultElementLocatingStrategy : "empty"), ex); } } /* * (non-Javadoc) * * @see org.jboss.arquillian.drone.spi.DroneConfiguration#getConfigurationName() */ @Override public String getConfigurationName() { return "graphene"; } /* * (non-Javadoc) * * @see * org.jboss.arquillian.drone.spi.DroneConfiguration#configure(org.jboss.arquillian.config.descriptor.api.ArquillianDescriptor * , java.lang.Class) */ @Override public GrapheneConfiguration configure(ArquillianDescriptor descriptor, Class qualifier) { return ConfigurationMapper.fromArquillianDescriptor(descriptor, this, qualifier); } /** * Checks if {@code url} is a valid address. * * @param url * @return true if {@code url} can be used as URL, false otherwise */ private boolean canConstructURL(String url) { if (url == null || url.isEmpty()) { return false; } boolean canConstruct; try { final URL currentUrl = new URL(url); if (currentUrl.getProtocol() != null) { this.scheme = currentUrl.getProtocol(); } canConstruct = true; } catch (MalformedURLException ex) { canConstruct = false; } return canConstruct; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy