|
Author: erwan
Date: Thu Jan 21 13:41:21 2010 New Revision: 901704 URL: http://svn.apache.org/viewvc?rev=901704&view=rev Log: Correct the firefox location on debian and add new functionnalities to seleniumXml : * take a browser screenshot with "captureEntirePageScreenshot" * close the browser at a test's end with "closeBrowser" Screenshots are saved in runtime/logs/ but can be changed in seleniumXml.properties file You can try those by launching the test CommEventCreateOpportunity_testsuite.xml The magic used to take screenshots was found on the seleniumexamples blog. Modified: ofbiz/trunk/applications/marketing/testdef/CommEventCreateOpportunity_testsuite.xml ofbiz/trunk/framework/testtools/config/seleniumXml.properties ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java Modified: ofbiz/trunk/applications/marketing/testdef/CommEventCreateOpportunity_testsuite.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/marketing/testdef/CommEventCreateOpportunity_testsuite.xml?rev=901704&r1=901703&r2=901704&view=diff ============================================================================== --- ofbiz/trunk/applications/marketing/testdef/CommEventCreateOpportunity_testsuite.xml (original) +++ ofbiz/trunk/applications/marketing/testdef/CommEventCreateOpportunity_testsuite.xml Thu Jan 21 13:41:21 2010 @@ -47,4 +47,6 @@ <waitForPageToLoad value="50000" /> <click locator="link=Communications" /> <waitForPageToLoad value="50000" /> + <captureEntirePageScreenshot value="CommEventCreateOpportunity"/> + <closeBrowser/> </testcase> Modified: ofbiz/trunk/framework/testtools/config/seleniumXml.properties URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/testtools/config/seleniumXml.properties?rev=901704&r1=901703&r2=901704&view=diff ============================================================================== --- ofbiz/trunk/framework/testtools/config/seleniumXml.properties (original) +++ ofbiz/trunk/framework/testtools/config/seleniumXml.properties Thu Jan 21 13:41:21 2010 @@ -1,7 +1,7 @@ serverHost=localhost proxyPort=4444 #for debian, use the following line -#browser=*firefox /usr/lib/iceweasel/iceweasel +#browser=*firefox /usr/lib/iceweasel/firefox-bin browser=*firefox /usr/lib/firefox-3.0.8/firefox startUrl=http://localhost:8080/ log4jFile=./config/log4j.properties \ No newline at end of file Modified: ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java?rev=901704&r1=901703&r2=901704&view=diff ============================================================================== --- ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java (original) +++ ofbiz/trunk/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java Thu Jan 21 13:41:21 2010 @@ -19,9 +19,6 @@ package org.ofbiz.testtools.seleniumxml; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -30,7 +27,6 @@ import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; -import java.net.URLConnection; import java.util.List; import java.util.Map; import java.util.Properties; @@ -41,10 +37,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import javolution.util.FastMap; import junit.framework.Assert; -import org.apache.commons.io.output.ByteArrayOutputStream; +import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.RandomStringUtils; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; @@ -53,7 +50,7 @@ import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; -import org.ofbiz.testtools.seleniumxml.util.TestUtils; +import org.ofbiz.base.util.UtilDateTime; import org.ofbiz.base.util.UtilGenerics; import org.ofbiz.base.util.UtilHttp; import org.ofbiz.base.util.UtilProperties; @@ -63,6 +60,8 @@ import org.ofbiz.testtools.seleniumxml.GroovyRunner; import org.ofbiz.testtools.seleniumxml.JythonRunner; import org.ofbiz.testtools.seleniumxml.RemoteRequest; +import org.ofbiz.testtools.seleniumxml.TestCaseException; +import org.ofbiz.testtools.seleniumxml.util.TestUtils; import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.SeleniumException; @@ -81,7 +80,8 @@ private String username; private String password; private String testCaseDirectory; - + private String imagePath = null; + public static void main(String[] args) throws JDOMException, IOException, TestCaseException{ if(args.length == 0) { System.out.println("Please include a path for the selenium XML test file."); @@ -145,9 +145,9 @@ } }catch(JDOMException jdome){ System.out.println(jdome.getMessage()); - }catch(IOException ioe){ + }catch(IOException ioe){ System.out.println("Error message : "+ioe.getMessage()); - }finally{ + }finally{ return "success"; } } @@ -320,8 +320,12 @@ selectWindow(elem); } else if("assertConfirmation" == thisName) { assertConfirmation(elem); + } else if("captureEntirePageScreenshot" == thisName) { + captureEntirePageScreenshotCmd(elem); } else if("runScript" == thisName) { runScript(elem); + } else if("closeBrowser" == thisName) { + sel.stop(); } else { logger.info("Undefined command calling by reflection for command: " + thisName); callByReflection(elem); @@ -686,6 +690,29 @@ } /** + * @param elem + * Will save a browser's screenshot in runtime/logs + * Need to be called with captureEntirePageScreenshot and the name of the test case + * example : + * <captureEntirePageScreenshot value="CommEventCreateOpportunity"/> + */ + private void captureEntirePageScreenshotCmd(Element elem) { + Long now = UtilDateTime.nowTimestamp().getTime(); + String imageName = replaceParam(elem.getAttributeValue("value")) + "-" + now.toString(); + logger.debug("captureEntirePageScreenshot: " + imageName); + imagePath = "runtime/logs/" + imageName + ".png"; + try { + String base64Screenshot = sel.captureEntirePageScreenshotToString(""); + byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes()); + FileOutputStream fos = new FileOutputStream(new File(imagePath)); + fos.write(decodedScreenshot); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** * @param elem takes a Selenium String locator. See Javadocs for more information. Here are some * example locators: * id="buttonId" - the easiest @@ -949,11 +976,11 @@ //First initialize with property values if(props != null ) { //Get setup params from property value - serverHost = props.getProperty("serverHost", "localhost"); serverPort = props.getProperty("proxyPort", "4444"); browser = props.getProperty("browser", "*iexplore"); startUrl = props.getProperty("startUrl", "http://localhost:8080"); + imagePath = props.getProperty("imagePath", "runtime/logs/"); } //Second over ride properties if defined in the "setup" element Element elem = this.doc.getRootElement().getChild("setup"); @@ -976,6 +1003,7 @@ logger.info("setup: serverPort=" + serverPort); logger.info("setup: browser=" + browser); logger.info("setup: startUrl=" + startUrl); + logger.info("setup: imagePath=" + imagePath); this.sel = new DefaultSelenium(serverHost, Integer.parseInt(serverPort), browser, startUrl); this.sel.start(); } |
| Free forum by Nabble | Edit this page |
