package org.exoplatform.portal.selenium; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringEscapeUtils; /** * Transforms the Selenium IDE recorded html to a corresponding JUnit class. */ public class SeleniumTestCaseGenerator { private static final String TEST_PATTERN = "Test_"; private static int testsNumber = 0; private static int testsSuitesNumber = 0; private String basedir; private String outputdir; public static void main(String[] args) throws Exception { SeleniumTestCaseGenerator seleneseToJavaBuilder = null; if (args.length == 1) { seleneseToJavaBuilder = new SeleniumTestCaseGenerator(args[0], args[0]); } else if (args.length == 2) { seleneseToJavaBuilder = new SeleniumTestCaseGenerator(args[0], args[1]); } else { throw new IllegalArgumentException("SeleneseToJavaBuilder suitePath [Target] [TestSpeed]"); } seleneseToJavaBuilder.run(); System.out.println("Done : " + testsNumber + " tests generated, " + testsSuitesNumber + " tests suites generated"); } public SeleniumTestCaseGenerator(String basedir, String outputdir) { this.basedir = basedir; this.outputdir = outputdir; } public void run() throws Exception { generate(new File(basedir), ""); } public void generate(File directoryFile, String path) throws Exception { File[] files = directoryFile.listFiles(); String testPackagePath = path.replaceAll(replaceSeparatorPattern, "."); for (int j = 0; j < files.length; j++) { File file = files[j]; String filePath = path.length() > 0 ? path + File.separator + file.getName() : file.getName(); if (file.isDirectory() && !file.getName().startsWith(".")) { generate(new File(directoryFile, file.getName()), filePath); } else if (file.getName().endsWith(".html") && file.getName().startsWith(TEST_PATTERN)) { generateFile(filePath, testPackagePath); } } } public void generateFile(String seleniumFile, String testPackagePath) throws Exception { seleniumFile = seleniumFile.replaceAll(replaceSeparatorPattern, "/"); int x = seleniumFile.lastIndexOf("/"); int y = seleniumFile.indexOf("."); String testName = seleniumFile.substring(x + 1, y); String testMethodName = "test" + testName.substring(5); String testFileName = outputdir + "/" + seleniumFile.substring(0, y) + ".java"; // Write each Test in one file StringBuffer sb = new StringBuffer(); sb.append("package " + testPackagePath + ";\n\n"); // sb.append("import org.exoplatform.util.selenium.BaseTestCase;\n"); sb.append("import junit.framework.TestCase;\n"); sb.append("import java.io.File;\n"); sb.append("import org.apache.commons.io.FileUtils;\n"); sb.append("import com.thoughtworks.selenium.*;\n"); sb.append("public class " + testName + " extends SeleneseTestCase {\n"); // setSpeed & setUp appendCommonMethods(sb); // testMethod appendTest(sb, seleniumFile, testName, testMethodName); sb.append("}\n"); String content = sb.toString(); writeFile(testFileName, content); testsNumber++; } private void appendCommonMethods(StringBuffer sb) { sb.append("public String speed = \"100\";\n"); sb.append("public String timeout = \"30000\";\n"); sb.append("public int timeoutSecInt = 30;\n"); sb.append("public String browser = \"firefox\";\n"); sb.append("public String host = \"localhost\";\n"); sb.append("public String hostPort = \"8080\";\n"); sb.append("public void setSpeed() {\n selenium.setSpeed(speed);\n}\n\n"); sb.append("public void setUp() throws Exception {\n"); sb.append(" browser = System.getProperty(\"selenium.browser\", browser);\n"); sb.append(" timeout = System.getProperty(\"selenium.timeout\", timeout);\n"); sb.append(" timeoutSecInt = Integer.parseInt(timeout)/1000;\n"); sb.append(" speed = System.getProperty(\"selenium.speed\", speed);\n"); sb.append(" host = System.getProperty(\"selenium.host\", host);\n"); sb.append(" hostPort = System.getProperty(\"selenium.host.port\", hostPort);\n"); sb.append(" super.setUp(\"http://\" + host + \":\" + hostPort + \"/portal/\", \"*\" + browser);\n"); sb.append("}\n\n"); } private void appendTest(StringBuffer sb, String scriptFile, String testName, String testMethodName) throws Exception { String xml = FileUtils.readFileToString(new File(basedir + "/" + scriptFile), "UTF-8"); System.out.println("* " + basedir + "/" + scriptFile); // Method sb.append("public void " + testMethodName + "() throws Exception {\n"); sb.append(" setSpeed();\n"); if ((xml.indexOf("<title>" + testName + "</title>") == -1) || (xml.indexOf("colspan=\"3\">" + testName + "</td>") == -1)) { System.out.println("[WARN] The test name inside the file should be the file name."); } if (xml.indexOf(""") != -1) { xml = replace(xml, """, "\""); // writeFile(outputdir + "/" + scriptFile, xml); } int x = xml.indexOf("<tbody>"); int y = xml.indexOf("</tbody>"); xml = xml.substring(x, y + 8); x = 0; y = 0; int count = 0; while (true) { x = xml.indexOf("<tr>", x); y = xml.indexOf("\n</tr>", x); if ((x == -1) || (y == -1)) { break; } x += 6; y++; count++; String step = xml.substring(x, y); String[] params = getParams(step); String param1 = params[0]; String param2 = fixParam(params[1]); // variables management param2 = param2.replaceAll("\\$\\{([a-z0-9A-Z]*)\\}", "\" + $1 + \""); param2 = param2.replaceAll("storedVars\\['([a-z0-9A-Z]*)'\\]", "'\" + $1 + \"'"); String param3 = fixParam(params[2]); // variables management param3 = param3.replaceAll("\\$\\{([a-z0-9A-Z]*)\\}", "\" + $1 + \""); param3 = param3.replaceAll("storedVars\\['([a-z0-9A-Z]*)'\\]", "'\" + $1 + \"'"); sb.append("\n //" + count + ": " + param1 + " | " + param2 + " | " + param3 + "\n"); if (param1.equals("assertConfirmation")) { param2 = replace(param2, "?", "[\\\\s\\\\S]"); sb.append("TestCase.assertTrue(selenium.getConfirmation().matches(\"^"); sb.append(param2); sb.append("$\"));\n"); } else if (param1.equals("assertAlert")) { sb.append("TestCase.assertTrue(selenium.getAlert().matches(\"^"); sb.append(param2); sb.append("$\"));\n"); } else if (param1.equals("assertLocation")) { sb.append("TestCase.assertTrue(selenium.getLocation().matches(\"^"); sb.append(param2); sb.append("$\"));\n"); } else if (param1.equals("waitForValue")) { sb.append("TestCase.assertTrue(selenium.getValue(\""); sb.append(param2); sb.append("\").matches(\"^"); sb.append(param3); sb.append("$\"));\n"); } else if (param1.equals("assertElementPresent") || param1.equals("assertElementNotPresent")) { if (param1.equals("assertElementPresent")) { sb.append("TestCase.assertTrue"); } else if (param1.equals("assertElementNotPresent")) { sb.append("TestCase.assertFalse"); } sb.append("(selenium.isElementPresent(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("assertTextPresent") || param1.equals("assertTextNotPresent")) { if (param1.equals("assertTextPresent")) { sb.append("TestCase.assertTrue"); } else if (param1.equals("assertTextNotPresent")) { sb.append("TestCase.assertFalse"); } sb.append("(selenium.isTextPresent(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("click") || param1.equals("contextMenu") || param1.equals("mouseDown") || param1.equals("doubleClick") || param1.equals("mouseDownRight") || param1.equals("mouseUp") || param1.equals("open") || param1.equals("selectFrame") || param1.equals("selectWindow") || param1.equals("focus")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\");\n"); } else if (param1.equals("clickAndWait")) { sb.append("selenium.click(\""); sb.append(param2); sb.append("\");\n"); sb.append("selenium.waitForPageToLoad(timeout);\n"); } else if (param1.equals("clickAt")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\", \"1,1\");\n"); } else if (param1.equals("clickAtAndWait")) { sb.append("selenium.clickAt(\""); sb.append(param2); sb.append("\", \"1,1\");\n"); sb.append("selenium.waitForPageToLoad(timeout);\n"); } else if (param1.equals("close") || param1.equals("chooseCancelOnNextConfirmation")) { sb.append("selenium."); sb.append(param1); sb.append("();\n"); } else if (param1.equals("pause")) { sb.append("Thread.sleep("); sb.append(param2); sb.append(");\n"); } else if (param1.equals("addSelection") || param1.equals("select") || param1.equals("type") || param1.equals("typeKeys") || param1.equals("waitForPopUp")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\", \""); sb.append(param3); sb.append("\");\n"); } else if (param1.equals("selectAndWait")) { sb.append("selenium.select(\""); sb.append(param2); sb.append("\", \""); sb.append(param3); sb.append("\");\n"); sb.append("selenium.waitForPageToLoad(timeout);\n"); } else if (param1.equals("storeText")) { sb.append("String "); sb.append(param3); sb.append(" = selenium.getText(\""); sb.append(param2); sb.append("\");\n"); sb.append("RuntimeVariables.setValue(\""); sb.append(param3); sb.append("\", "); sb.append(param3); sb.append(");\n"); } else if (param1.equals("verifyElementPresent") || param1.equals("verifyElementNotPresent")) { if (param1.equals("verifyElementPresent")) { sb.append("TestCase.assertTrue"); } else if (param1.equals("verifyElementNotPresent")) { sb.append("TestCase.assertFalse"); } sb.append("(selenium.isElementPresent(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("verifyTextPresent") || param1.equals("verifyTextNotPresent")) { if (param1.equals("verifyTextPresent")) { sb.append("TestCase.assertTrue"); } else if (param1.equals("verifyTextNotPresent")) { sb.append("TestCase.assertFalse"); } sb.append("(selenium.isTextPresent(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("verifyText")) { sb.append("TestCase.assertTrue"); sb.append("(selenium.getText(\""); sb.append(param2); sb.append("\").equals(\""); sb.append(param3); sb.append("\"));\n"); } else if (param1.equals("verifyTitle")) { sb.append("TestCase.assertEquals(\""); sb.append(param2); sb.append("\", selenium.getTitle());\n"); } else if (param1.equals("waitForElementNotPresent")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\nif (!selenium.isElementPresent(\""); sb.append(param2); sb.append("\"))\n break;\n }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForElementPresent")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n if (selenium.isElementPresent(\""); sb.append(param2); sb.append("\")) \nbreak; }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForTextPresent")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n if (selenium.isTextPresent(\""); sb.append(param2); sb.append("\")) \nbreak; }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForTextNotPresent")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n if (!selenium.isTextPresent(\""); sb.append(param2); sb.append("\")) \nbreak; }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForTable")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n"); sb.append("if (\"\".equals(selenium.getTable(\""); sb.append(param2); sb.append("\"))) {\nbreak;\n}\n}\ncatch (Exception e) {\n}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("mouseDownAt") || param1.equals("mouseUpAt")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\",\""); sb.append(param3); sb.append("\");\n"); } else if (param1.equals("verifyValue")) { sb.append("TestCase.assertEquals(\""); sb.append(param3); sb.append("\", selenium.getValue(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("waitForAlert")) { sb.append("waitForAlert(\""); sb.append(param2); sb.append("\");\n"); } else if (param1.equals("waitForConfirmation")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n"); sb.append("if (selenium.getConfirmation().equals(\""); sb.append(param2); sb.append("\")) {\nbreak;\n}\n}\ncatch (Exception e) {\n}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForConfirmationPresent")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n"); sb.append("if (selenium.isConfirmationPresent()"); sb.append("){\nbreak;\n}\n}\ncatch (Exception e) {\n}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("verifyEval")) { sb.append("TestCase.assertEquals(\""); sb.append(param3); sb.append("\", selenium.getEval(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("mouseOver") || param1.equals("mouseOut")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\");\n"); } else if (param1.equals("assertVisible")) { sb.append("TestCase.assertTrue(selenium.isVisible"); sb.append("(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("verifyVisible")) { sb.append("TestCase.assertTrue(selenium.isVisible"); sb.append("(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("verifyChecked")) { sb.append("verifyTrue(selenium.isChecked"); sb.append("(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("waitForNotVisible")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\nif (!selenium.isVisible(\""); sb.append(param2); sb.append("\"))\n break;\n }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("verifySelectedValue")) { sb.append("TestCase.assertTrue"); sb.append("(selenium.getSelectedValue(\""); sb.append(param2); sb.append("\").equals(\""); sb.append(param3); sb.append("\"));\n"); } else if (param1.equals("verifyNotVisible")) { sb.append("TestCase.assertFalse(selenium.isVisible"); sb.append("(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("waitForVisible")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\nif (selenium.isVisible(\""); sb.append(param2); sb.append("\"))\n break;\n }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForChecked")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\nif (selenium.isChecked(\""); sb.append(param2); sb.append("\"))\n break;\n }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForNotChecked")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\nif (!selenium.isChecked(\""); sb.append(param2); sb.append("\"))\n break;\n }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForLocation")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\n"); sb.append("if (selenium.getLocation().equals(\""); sb.append(param2); sb.append("\")) {\nbreak;\n}\n}\ncatch (Exception e) {\n}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("waitForSelectedValue")) { sb.append("TestCase.assertTrue(selenium.getSelectedValue(\""); sb.append(param2); sb.append("\").matches(\"^"); sb.append(param3); sb.append("$\"));\n"); } else if (param1.equals("waitForAttribute")) { sb.append("TestCase.assertTrue(selenium.getAttribute(\""); sb.append(param2); sb.append("\").matches(\"^"); sb.append(param3); sb.append("$\"));\n"); } else if (param1.equals("doubleClickAt")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\", \"1,1\");\n"); } else if (param1.equals("verifySelectedLabel")) { sb.append("TestCase.assertTrue"); sb.append("(selenium.getSelectedLabel(\""); sb.append(param2); sb.append("\").equals(\""); sb.append(param3); sb.append("\"));\n"); } else if (param1.equals("storeEval")) { sb.append("String ").append(param3).append(" = selenium.getEval(\"").append(param2).append("\").toString();\n"); } else if (param1.equals("store")) { sb.append("String ").append(param3).append(" = (\"\" + ").append(param2).append(" + \"\").toString();\n"); } else if (param1.equals("keyDown")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\", \""); sb.append(param3); sb.append("\");\n"); } else if (param1.equals("verifyAttribute")) { sb.append("TestCase.assertTrue"); sb.append("(selenium.getAttribute(\""); sb.append(param2); sb.append("\").equals(\""); sb.append(param3); sb.append("\"));\n"); } else if (param1.equals("assertNotVisible")) { sb.append("TestCase.assertFalse(selenium.isVisible"); sb.append("(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("waitForNotSpeed")) { sb.append("selenium.waitForNotSpeed(\""); sb.append(param2); sb.append("\");\n"); } else if (param1.equals("waitForSpeed")) { sb.append("selenium.waitForSpeed(\""); sb.append(param2); sb.append("\");\n"); } else if (param1.equals("assertValue")) { sb.append("TestCase.assertEquals(\""); sb.append(param3); sb.append("\", selenium.getValue(\""); sb.append(param2); sb.append("\"));\n"); } else if (param1.equals("setSpeed")) { sb.append("selenium.setSpeed(\"").append(param2).append("\");\n"); } else if (param1.equals("chooseOkOnNextConfirmation")) { sb.append("selenium.chooseOkOnNextConfirmation();\n"); } else if (param1.equals("storeConfirmation")) { sb.append("String ").append(param2).append(" = selenium.getConfirmation();\n"); } else if (param1.equals("keyPress")) { sb.append("selenium.keyPress(\"").append(param2).append("\",\"").append(param3).append("\");\n"); } else if (param1.equals("check")) { sb.append("selenium.check(\"").append(param2).append("\");\n"); } else if (param1.equals("uncheck")) { sb.append("selenium.uncheck(\"").append(param2).append("\");\n"); } else if (param1.equals("verifyNotChecked")) { sb.append("verifyFalse(selenium.isChecked(\"").append(param2).append("\"));\n"); } else if (param1.equals("deleteCookie")) { sb.append("selenium.deleteCookie(\"").append(param2).append("\",\"").append(param3).append("\");\n"); } else if (param1.equals("windowMaximize")) { sb.append("selenium.windowMaximize()").append(";\n"); } else if (param1.equals("waitForText")) { sb.append("for (int second = 0;; second++) {\n"); sb.append(getTimeoutMessage(param1)); sb.append("try {\nif (selenium.isElementPresent(\""); sb.append(param2); sb.append("\"))\n break;\n }\n catch (Exception e) {}\n"); sb.append("Thread.sleep(1000);\n"); sb.append("}\n"); } else if (param1.equals("refresh")) { sb.append("selenium.refresh();\n"); // ------------------User extension---------------- /** * CreateFolderbyTime will create a Folder on Linux by time with current date and newest Rev : * revXXXXX/YYYYMMDD/ Account use to create Folder is root */ } else if (param1.equals("CreateFolderReport")) { sb.append("String pathDirReportPLF30x = \"/home/linh_vu/DailyReport/\" + "); sb.append(param2); sb.append(" + \"/rev\" + "); sb.append(param3); sb.append("; \n"); sb.append("new File(pathDirReportPLF30x).mkdirs();\n"); } else if (param1.equals("copyReportPLF30x")) { sb.append("File fOrigPLF30x = new File(\"/home/linh_vu/java/eXoProjects/plf-platform-3.0/testsuite/selenium/target/tests.exoplatform.org/\""); sb.append(" + "); sb.append(param3); sb.append("); \n"); sb.append("File fDestPLF30x = new File(pathDirReportPLF30x);\n"); sb.append("FileUtils.copyFileToDirectory(fOrigPLF30x, fDestPLF30x); \n"); // ---------------------------------end----------- } else if (param1.equals("keyDown")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\", \""); sb.append(param3); sb.append("\");\n"); } else if (param1.equals("keyUp")) { sb.append("selenium."); sb.append(param1); sb.append("(\""); sb.append(param2); sb.append("\", \""); sb.append(param3); sb.append("\");\n"); } else if (param1.equals("storeValue")) { sb.append("String "); sb.append(param3); sb.append(" = selenium.getValue(\""); sb.append(param2); sb.append("\");\n"); sb.append("RuntimeVariables.setValue(\""); sb.append(param3); sb.append("\", "); sb.append(param3); sb.append(");\n"); } else if (param1.equals("verifyLocation")) { sb.append("TestCase.assertEquals(\""); sb.append(param2); sb.append("\", selenium.getLocation());\n"); } else if (param1.equals("TypeRandom")) { sb.append("selenium.getEval(\"selenium.doTypeRandom(\\\""); sb.append(param2); sb.append("\\\",\\\""); sb.append(param3); sb.append("\\\"));\n"); } else if (param1.equals("refreshAndWait")) { sb.append("selenium.refresh();\n"); sb.append("selenium.waitForPageToLoad(timeout);\n"); } else if (param1.equals("storeXpathCount")) { sb.append("String ").append(param3).append(" = selenium.getXpathCount(\"").append(param2) .append("\").toString();\n"); } else if (param1.equals("verifyOrdered")) { sb.append("selenium.isOrdered(\"").append(param2).append("\",\"").append(param3).append("\");\n"); } else if (param1.equals("dragAndDropToObject")) { sb.append("selenium.dragAndDropToObject(\"").append(param2).append("\",\"").append(param3).append("\");\n"); } else if (param1.equals("componentExoContextMenu")) { sb.append("selenium.getEval(\"selenium.doComponentExoContextMenu(\\\"").append(param2).append("\\\")\");\n"); } else if (param1.equals("componentExoContextMenuAndWait")) { sb.append("selenium.doComponentExoContextMenu(\""); sb.append(param2); sb.append("\");\n"); sb.append("selenium.waitForPageToLoad(timeout);\n"); } else if (param1.equals("getExoExtensionVersion")) { sb.append("selenium.getEval(\"selenium.doGetExoExtensionVersion(\\\"").append(param2).append("\\\")\");\n"); } else if (param1.equals("componentExoDoubleClick")) { sb.append("selenium.getEval(\"selenium.doComponentExoDoubleClick(\\\"").append(param2).append("\\\")\");\n"); } else if (param1.equals("checkAndWait")) { sb.append("selenium.check(\""); sb.append(param2); sb.append("\");\n"); sb.append("selenium.waitForPageToLoad(timeout);\n"); } else if (param1.equals("storeAttribute")) { sb.append("String ").append(param3).append(" = ").append("selenium.getAttribute(\"").append(param2) .append("\");\n"); } else if (param1.equals("storeElementPositionTop")) { sb.append("String ").append(param3).append(" = ").append("selenium.getElementPositionTop(\"").append(param2) .append("\");\n"); } else if (param1.equals("verifyElementPositionTop")) { sb.append("verifyEquals(").append("\"").append(param3).append("\", ") .append("selenium.getElementPositionTop(\"").append(param2).append("\"));\n"); } else if (param1.equals("echo")) { sb.append("System.out.println(\"" + param2 + "\");\n"); } else if (param1.length() > 0) { String message = param1 + " was not translated \"" + param2 + "\""; System.err.println("[ERROR] " + message); sb.append("// NOT GENERATED " + message); throw new RuntimeException("Selenium function not implemented : " + message); } } sb.append("}\n\n"); } private String getTimeoutMessage(String param1) { return "if (second >= timeoutSecInt)\n fail(\"" + param1 + " reached a timeout (\" + timeoutSecInt + \"s)\");\n"; } public static void writeFile(String file, String content) throws IOException { System.out.println("[INFO] Writing file : " + file); FileUtils.writeStringToFile(new File(file), content); } private String[] getParams(String step) { String[] params = new String[3]; int x = 0; int y = 0; for (int i = 0; i < 3; i++) { x = step.indexOf("<td>", x) + 4; y = step.indexOf("\n", x); y = step.lastIndexOf("</td>", y); params[i] = StringEscapeUtils.unescapeHtml(step.substring(x, y)); } return params; } private String replace(String s, String oldSub, String newSub) { if ((s == null) || (oldSub == null) || (newSub == null)) { return null; } int y = s.indexOf(oldSub); if (y >= 0) { StringBuffer sb = new StringBuffer(s.length() + 5 * newSub.length()); int length = oldSub.length(); int x = 0; while (x <= y) { sb.append(s.substring(x, y)); sb.append(newSub); x = y + length; y = s.indexOf(oldSub, x); } sb.append(s.substring(x)); return sb.toString(); } else { return s; } } private String fixParam(String param) { StringBuffer sb = new StringBuffer(); char[] array = param.toCharArray(); for (int i = 0; i < array.length; ++i) { char c = array[i]; if (c == '\\') { sb.append("\\\\"); } else if (c == '"') { sb.append("\\\""); } else if (Character.isWhitespace(c)) { sb.append(c); /* * else if ((c < 0x0020) || (c > 0x007e)) { sb.append("\\u"); sb.append(UnicodeFormatter.charToHex(c)); } */ } else { sb.append(c); } } return replace(sb.toString(), _FIX_PARAM_OLD_SUBS, _FIX_PARAM_NEW_SUBS); } private String replace(String s, String[] oldSubs, String[] newSubs) { if ((s == null) || (oldSubs == null) || (newSubs == null)) { return null; } if (oldSubs.length != newSubs.length) { return s; } for (int i = 0; i < oldSubs.length; i++) { s = replace(s, oldSubs[i], newSubs[i]); } return s; } private static final String replaceSeparatorPattern = File.separator.equals("\\") ? "\\\\" : File.separator; private static final String[] _FIX_PARAM_OLD_SUBS = new String[] { "\\\\n", "<br />" }; private static final String[] _FIX_PARAM_NEW_SUBS = new String[] { "\\n", "\\n" }; public static final String SLASH = "/"; }