package org.sky.auto.driver; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import static org.apache.commons.lang.StringUtils.join; /** * 需要一个javascript和actionscript的钩子来实现通信,目前在不获得源码的情况下很难实现钩子, * 目前这个类是不能够进行自动化测试的。缺少必要的组件,钩子问题需要慢慢的找方法解决,先把这个类放在 * 这里,需要后期慢慢发现方法。 */ public class FlashDriver implements WebDriver { protected WebDriver delegate; protected String flashObjectId; public FlashDriver(WebDriver delegate, String flashObjectId) { this.delegate = delegate; this.flashObjectId = flashObjectId; } public Object call(String functionName, String... args) { if (delegate instanceof JavascriptExecutor) { WebElement flashObject = findFlashObject(flashObjectId); String script = formatJavascript(functionName, args); return ((JavascriptExecutor) delegate).executeScript(script, flashObject); } throw new JavascriptNotSupported(delegate); } protected WebElement findFlashObject(String flashObjectId) { return delegate.findElement(By.id(flashObjectId)); } protected String formatJavascript(String functionName, String... args) { List<String> quotedArgs = new ArrayList<String>(); for (String arg : args) { quotedArgs.add("'" + arg + "'"); } return "return arguments[0]." + functionName + "(" + join(quotedArgs, ",") + ");"; } // Utility methods that map to SWF function calls public void click() { call("click"); } public int percentLoaded() { return Integer.parseInt(call("PercentLoaded").toString()); } // WebDriver methods public void get(String s) { delegate.get(s); } public String getCurrentUrl() { return delegate.getCurrentUrl(); } public String getTitle() { return delegate.getTitle(); } public List<WebElement> findElements(By by) { return delegate.findElements(by); } public WebElement findElement(By by) { return delegate.findElement(by); } public String getPageSource() { return delegate.getPageSource(); } public void close() { delegate.close(); } public void quit() { delegate.quit(); } public Set<String> getWindowHandles() { return delegate.getWindowHandles(); } public String getWindowHandle() { return delegate.getWindowHandle(); } public TargetLocator switchTo() { return delegate.switchTo(); } public Navigation navigate() { return delegate.navigate(); } public Options manage() { return delegate.manage(); } @SuppressWarnings("serial") public static class JavascriptNotSupported extends RuntimeException { public JavascriptNotSupported(WebDriver delegate) { super("Javascript not supported by WebDriver "+delegate); } } }