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

holmos.webtest.css.HolmosCSSTool Maven / Gradle / Ivy

There is a newer version: 1.0.2u10
Show newest version
package holmos.webtest.css;

import holmos.webtest.asserttool.HolmosSimpleCheckTool;
import holmos.webtest.basetools.HolmosBaseTools;
import holmos.webtest.basetools.HolmosPropertiesTool;
import holmos.webtest.constvalue.ConfigConstValue;
import holmos.webtest.constvalue.ConstValue;
import holmos.webtest.element.Element;
import holmos.webtest.element.Image;
import holmos.webtest.exceptions.HolmosFailedError;
import holmos.webtest.log.MyLogger;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;

import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
/**
 * 页面样式校验工具
 * 
 * @author 吴银龙([email protected])
 * */
public class HolmosCSSTool {
	private static MyLogger logger=MyLogger.getLogger(HolmosBaseTools.class);
	private static Properties cssCommanPropertiesConfig;
	private static Properties imgCssPropertiesConfig;
	
	static {
		cssCommanPropertiesConfig=HolmosPropertiesTool.getPropertiesFromClassPath(ConfigConstValue.CSSPROPERTIESCONFIG);
		imgCssPropertiesConfig=HolmosPropertiesTool.getPropertiesFromClassPath(ConfigConstValue.IMGCSSPROPERTIESCONFIG);
		HolmosBaseTools.configLogProperties();
	}
	/**
	 * 指定元素本地存储的css属性信息,如果存在返回property文件信息,如果不存在返回null
	 * @param element 指定的holmos元素
	 * @return 指定元素本地存储的css属性信息
	 * */
	private static Properties getCSSValueFromLocal(Element element){
		String cssFilePath=ConstValue.CSSPROPERTIESDIR+"\\"+element.getFullName()+".properties";
		return HolmosPropertiesTool.getPropertyInfo(cssFilePath);
	}
	/**
	 * 在本地没有css属性文件的情况下,利用页面测试引擎来获取Img类型元素属性信息
	 * */
	private static Properties getImgCssValues(Element element){
		Properties imgCssProperties=new Properties();
		Iterator imgCssKeyIterator=imgCssPropertiesConfig.keySet().iterator();
		if(element.isExist()){
			while(imgCssKeyIterator.hasNext()){
				String cssKey=(String) imgCssKeyIterator.next();
				if(HolmosPropertiesTool.getBoolean(imgCssPropertiesConfig, cssKey)){
					imgCssProperties.put(cssKey,element.getElement().getCssValue(cssKey));
				}
			}
		}
		return imgCssProperties;
	}
	/**
	 * 在本地没有css属性文件的情况下,利用页面测试引擎来获取普通类型元素属性信息
	 * */
	private static Properties getCommCssValues(Element element){
		Properties comCssProperties=new Properties();
		Iterator imgCssKeyIterator=cssCommanPropertiesConfig.keySet().iterator();
		if(element.isExist()){
			while(imgCssKeyIterator.hasNext()){
				String cssKey=(String) imgCssKeyIterator.next();
				if(HolmosPropertiesTool.getBoolean(cssCommanPropertiesConfig, cssKey)){
					comCssProperties.put(cssKey,element.getElement().getCssValue(cssKey));
				}
			}
		}
		return comCssProperties;
	}
	/**
	 * 在本地没有css属性文件的情况下,利用页面测试引擎来获取元素属性信息
	 * */
	private static Properties getCssValuesFromEngine(Element element){
		if(element instanceof Image){
			return getImgCssValues(element);
		}return getCommCssValues(element);
	}
	/**
	 * 从本机获元素element的所有的存储的css属性,如果没有的话,那么重新从界面上获取,
* 然后生成文件,并且将此文件存储到holmos框架指定的位置,如果存在,就直接获取 * @param element holmos框架指定的元素 * */ public static Properties getCSSValues(Element element){ Properties cssProperties=getCSSValueFromLocal(element); if(cssProperties!=null)return cssProperties; cssProperties=getCssValuesFromEngine(element); HolmosPropertiesTool.savePropertiesFile(cssProperties, ConstValue.CSSPROPERTIESDIR+"\\"+element.getFullName(), element.getFullName()+"css属性信息"); return cssProperties; } /** * 获取指定元素的指定css属性,从引擎中获取 * @param element 指定的元素 * @param 指定的属性名字 * @return 获取到得属性信息 * */ public static String getCssValue(Element element,String cssValueKey){ if(element.isExist()){ return element.getCSSValue(cssValueKey); } return null; } /** * 获取所有指定元素列表的位置信息,左上角的位置 * */ private ArrayList getLocations(ArrayListelements){ ArrayList locations=new ArrayList(); for(Element element:elements){ locations.add(element.getLocation()); } return locations; } /** * 获取所有指定元素列表的大小信息 * */ private ArrayList getSizes(ArrayListelements){ ArrayList sizes=new ArrayList(); for(Element element:elements){ sizes.add(element.getSize()); } return sizes; } /** * 校验给定元素列表是否上边界对其 * @param elements 待校验的元素 * */ public void assertTopAlign(ArrayListelements){ ArrayListlocations=getLocations(elements); for(int i=1;ielements){ ArrayListlocations=getLocations(elements); for(int i=1;ielements){ ArrayListlocations=getLocations(elements); ArrayListsizes=getSizes(elements); for(int i=1;ielements){ ArrayListlocations=getLocations(elements); ArrayListsizes=getSizes(elements); for(int i=1;ielements){ ArrayList colors=new ArrayList(); for(Element element:elements){ colors.add(element.getCSSValue("color")); } StringBuilder message=new StringBuilder(); if(colors.get(0)==null){ throw new HolmosFailedError(elements.get(0).getComment()+"color属性获取不到~"); } for(int i=0;ielements){ ArrayListlocations=getLocations(elements); StringBuilder message=new StringBuilder(); for(int i=1;ielements){ ArrayListlocations=getLocations(elements); StringBuilder message=new StringBuilder(); for(int i=1;ilocations.get(i-1).x){ message.append("元素横坐标依次递减校验失败!\n"); for(int j=0;jelements){ ArrayListlocations=getLocations(elements); StringBuilder message=new StringBuilder(); for(int i=1;ielements){ ArrayListlocations=getLocations(elements); StringBuilder message=new StringBuilder(); for(int i=1;ilocations.get(i-1).y){ message.append("元素横坐标依次递减校验失败!\n"); for(int j=0;jelements){ ArrayList sizes=getSizes(elements); StringBuilder message=new StringBuilder(); for(int i=1;i