package com.redhat.qe.auto.selenium; public class Element { protected String locator = null; protected LocatorStrategy locatorStrategy= null; protected String[] locatorStrategyArgs = null; protected Element humanReadable = null; public Element(){ } public Element(String locator){ this.locator = locator; } public Element(LocatorStrategy locatorStrategy){ this.locatorStrategy = locatorStrategy; this.locatorStrategyArgs = new String[]{}; } public Element(LocatorStrategy locatorStrategy, String... locatorStrategyArgs){ this.locatorStrategy = locatorStrategy; this.locatorStrategyArgs = locatorStrategyArgs; } public Element(Element humanReadable,LocatorStrategy locatorStrategy, String... locatorStrategyArgs){ this.locatorStrategy = locatorStrategy; this.locatorStrategyArgs = locatorStrategyArgs; this.humanReadable = humanReadable; } public Element(String locator, Element humanReadable) { this.locator = locator; this.humanReadable = humanReadable; } public String getLocator(){ /* if (locatorStrategy != null ) && (locator != null )) throw new IllegalStateException("Must not set both locator and locatorStrategy for an element (locator=" + locator + ", locatorStrategy=" + locatorStrategy + ")"); */ if (! (locatorStrategyArgs==null)) return getLocator(locatorStrategyArgs); return locator; } public String getLocator(String... locatorStrategyArgs){ return locatorStrategy.getLocator(locatorStrategyArgs); } public LocatorStrategy getLocatorStrategy(){ return locatorStrategy; } public String[] getArguments() { return locatorStrategyArgs; } public Element getHumanReadable() { return humanReadable; } public void setLocator(String locator) { this.locator = locator; } public void setLocatorStrategy(LocatorStrategy locatorStrategy) { this.locatorStrategy = locatorStrategy; } public void setHumanReadable(Element humanReadable) { this.humanReadable = humanReadable; } public void setLocatorStrategyArgs(String[] locatorStrategyArgs) { this.locatorStrategyArgs = locatorStrategyArgs; } public void setLocatorStrategyArgs(String[] locatorStrategyArgs, Element humanReadable) { this.locatorStrategyArgs = locatorStrategyArgs; this.humanReadable = humanReadable; } /** * @param index - 1 based index of the arg list to set * @param locatorStrategyArg - new value */ public void setLocatorStrategyArg(int index, String locatorStrategyArg) { this.locatorStrategyArgs[index-1]=locatorStrategyArg; } public String toString(){ StringBuffer sb = new StringBuffer(); if (locatorStrategy != null) { sb.append(locatorStrategy.getName()); if (locatorStrategyArgs!=null) { for (String arg:locatorStrategyArgs){ sb.append(" '" + arg + "'"); } } sb.append(". ("); } sb.append(getLocator()); if (locatorStrategy != null) { sb.append(")"); } return sb.toString(); } public static void main(String[] args){ Element mylocator = new Element("//a[.='Login']"); Element genericLink = new Element( new LocatorStrategy(){ public String getLocator(String... locatorStrategyArgs){ return "//a[.='" + locatorStrategyArgs[0] + "']"; } public String getName(){ return "my silly strategy"; } @Override public String getTemplate(String... args) { return "//a[.='$1']"; } } , "myarg"); System.out.println("Found " + genericLink.getArguments() + " using " + genericLink.getLocatorStrategy().getName() + ", " + genericLink.getLocator("Login") + ""); } }