1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.tools;
16  
17  import com.liferay.portal.kernel.util.CharPool;
18  import com.liferay.portal.kernel.util.FileUtil;
19  import com.liferay.portal.kernel.util.SetUtil;
20  import com.liferay.portal.kernel.util.StringBundler;
21  import com.liferay.portal.kernel.util.StringPool;
22  import com.liferay.portal.kernel.util.StringUtil;
23  import com.liferay.portal.kernel.util.UnicodeFormatter;
24  import com.liferay.portal.tools.servicebuilder.ServiceBuilder;
25  import com.liferay.portal.util.InitUtil;
26  
27  import java.io.File;
28  
29  import java.util.HashMap;
30  import java.util.Map;
31  import java.util.Set;
32  
33  import org.apache.tools.ant.DirectoryScanner;
34  
35  /**
36   * <a href="SeleneseToJavaBuilder.java.html"><b><i>View Source</i></b></a>
37   *
38   * @author Brian Wing Shun Chan
39   */
40  public class SeleneseToJavaBuilder {
41  
42      public static void main(String[] args) throws Exception {
43          InitUtil.initWithSpring();
44  
45          if (args.length == 1) {
46              new SeleneseToJavaBuilder(args[0]);
47          }
48          else {
49              throw new IllegalArgumentException();
50          }
51      }
52  
53      public SeleneseToJavaBuilder(String basedir) throws Exception {
54          DirectoryScanner ds = new DirectoryScanner();
55  
56          ds.setBasedir(basedir);
57          ds.setExcludes(
58              new String[] {
59                  "**\\IterateThemeTest.java", "**\\StopSeleniumTest.java"
60              });
61          ds.setIncludes(new String[] {"**\\*Test.html", "**\\*Test.java"});
62  
63          ds.scan();
64  
65          Set<String> fileNames = SetUtil.fromArray(ds.getIncludedFiles());
66  
67          for (String fileName : fileNames) {
68  
69              // I would have preferred to use XlateHtmlSeleneseToJava, but it
70              // is horribly out of sync with Selenium IDE and generates incorrect
71              // code.
72  
73              /*String input = StringUtil.replace(
74                  basedir + "/" + fileName, "\\", "/");
75  
76              XlateHtmlSeleneseToJava.main(
77                  new String[] {
78                      "test", "-silent", input
79                  }
80              );*/
81  
82              if (fileName.endsWith("Test.html")) {
83                  translate(basedir, fileName);
84              }
85              else if (fileName.endsWith("Test.java")) {
86                  if (!fileNames.contains(
87                          fileName.substring(0, fileName.length() - 5) +
88                              ".html")) {
89  
90                      System.out.println("unused: " + fileName);
91                  }
92              }
93          }
94      }
95  
96      protected String fixParam(String param) {
97          StringBuilder sb = new StringBuilder();
98  
99          char[] array = param.toCharArray();
100 
101         for (int i = 0; i < array.length; ++i) {
102             char c = array[i];
103 
104             if (c == CharPool.BACK_SLASH) {
105                 sb.append("\\\\");
106             }
107             else if (c == CharPool.QUOTE) {
108                 sb.append("\\\"");
109             }
110             else if (Character.isWhitespace(c)) {
111                 sb.append(c);
112             }
113             else if ((c < 0x0020) || (c > 0x007e)) {
114                 sb.append("\\u");
115                 sb.append(UnicodeFormatter.charToHex(c));
116             }
117             else {
118                 sb.append(c);
119             }
120         }
121 
122         return StringUtil.replace(
123             sb.toString(), _FIX_PARAM_OLD_SUBS, _FIX_PARAM_NEW_SUBS);
124     }
125 
126     protected String[] getParams(String step) throws Exception {
127         String[] params = new String[3];
128 
129         int x = 0;
130         int y = 0;
131 
132         for (int i = 0; i < 3; i++) {
133             x = step.indexOf("<td>", x) + 4;
134             y = step.indexOf("\n", x);
135             y = step.lastIndexOf("</td>", y);
136 
137             params[i] = step.substring(x, y);
138         }
139 
140         return params;
141     }
142 
143     protected void translate(String basedir, String fileName) throws Exception {
144         fileName = StringUtil.replace(
145             fileName, StringPool.BACK_SLASH, StringPool.SLASH);
146 
147         int x = fileName.lastIndexOf(StringPool.SLASH);
148         int y = fileName.indexOf(StringPool.PERIOD);
149 
150         String testPackagePath = StringUtil.replace(
151             fileName.substring(0, x), StringPool.SLASH, StringPool.PERIOD);
152         String testName = fileName.substring(x + 1, y);
153         String testMethodName =
154             "test" + testName.substring(0, testName.length() - 4);
155         String testFileName =
156             basedir + "/" + fileName.substring(0, y) + ".java";
157 
158         StringBundler sb = new StringBundler();
159 
160         sb.append("package ");
161         sb.append(testPackagePath);
162         sb.append(";\n\n");
163 
164         sb.append("import com.liferay.portal.kernel.util.FileUtil;\n");
165         sb.append("import com.liferay.portal.kernel.util.StringPool;\n");
166         sb.append("import com.liferay.portalweb.portal.BaseTestCase;\n\n");
167         sb.append(
168             "import com.liferay.portalweb.portal.util.RuntimeVariables;\n\n");
169 
170         sb.append("public class ");
171         sb.append(testName);
172         sb.append(" extends BaseTestCase {");
173 
174         sb.append("public void ");
175         sb.append(testMethodName);
176         sb.append("() throws Exception {");
177 
178         String xml = FileUtil.read(basedir + "/" + fileName);
179 
180         if ((xml.indexOf("<title>" + testName + "</title>") == -1) ||
181             (xml.indexOf("colspan=\"3\">" + testName + "</td>") == -1)) {
182 
183             System.out.println(testName + " has an invalid test name");
184         }
185 
186         if (xml.indexOf("&gt;") != -1) {
187             xml = StringUtil.replace(xml, "&gt;", ">");
188 
189             FileUtil.write(basedir + "/" + fileName, xml);
190         }
191 
192         if (xml.indexOf("&lt;") != -1) {
193             xml = StringUtil.replace(xml, "&lt;", "<");
194 
195             FileUtil.write(basedir + "/" + fileName, xml);
196         }
197 
198         if (xml.indexOf("&quot;") != -1) {
199             xml = StringUtil.replace(xml, "&quot;", "\"");
200 
201             FileUtil.write(basedir + "/" + fileName, xml);
202         }
203 
204         x = xml.indexOf("<tbody>");
205         y = xml.indexOf("</tbody>");
206 
207         xml = xml.substring(x, y + 8);
208 
209         Map<String, String> labels = new HashMap<String, String>();
210 
211         int labelCount = 1;
212 
213         x = 0;
214         y = 0;
215 
216         while (true) {
217             x = xml.indexOf("<tr>", x);
218             y = xml.indexOf("\n</tr>", x);
219 
220             if ((x == -1) || (y == -1)) {
221                 break;
222             }
223 
224             x += 6;
225             y++;
226 
227             String step = xml.substring(x, y);
228 
229             String[] params = getParams(step);
230 
231             String param1 = params[0];
232             String param2 = fixParam(params[1]);
233 
234             if (param1.equals("label")) {
235                 String label = labels.get(param2);
236 
237                 if (label == null) {
238                     labelCount++;
239 
240                     label = labels.put(param2, String.valueOf(labelCount));
241                 }
242             }
243         }
244 
245         if (labels.size() > 0) {
246             sb.append("int label = 1;");
247 
248             sb.append("while (label >= 1) {");
249             sb.append("switch (label) {");
250             sb.append("case 1:");
251         }
252 
253         x = 0;
254         y = 0;
255 
256         while (true) {
257             x = xml.indexOf("<tr>", x);
258             y = xml.indexOf("\n</tr>", x);
259 
260             if ((x == -1) || (y == -1)) {
261                 break;
262             }
263 
264             x += 6;
265             y++;
266 
267             String step = xml.substring(x, y);
268 
269             String[] params = getParams(step);
270 
271             String param1 = params[0];
272             String param2 = fixParam(params[1]);
273             String param3 = fixParam(params[2]);
274 
275             if (param1.equals("addSelection") || param1.equals("clickAt") ||
276                 param1.equals("keyPress") || param1.equals("openWindow") ||
277                 param1.equals("select") || param1.equals("type") ||
278                 param1.equals("typeKeys") || param1.equals("waitForPopUp")) {
279 
280                 sb.append("selenium.");
281                 sb.append(param1);
282                 sb.append("(\"");
283                 sb.append(param2);
284                 sb.append("\", RuntimeVariables.replace(");
285 
286                 if (param3.startsWith("${")) {
287                     sb.append("RuntimeVariables.getValue(\"");
288 
289                     String text = param3.substring(2, param3.length() - 1);
290 
291                     sb.append(text);
292                     sb.append("\")");
293                 }
294                 else {
295                     sb.append("\"");
296                     sb.append(param3);
297                     sb.append("\"");
298                 }
299 
300                 sb.append("));");
301             }
302             else if (param1.equals("assertAlert") ||
303                      param1.equals("assertNotAlert")) {
304 
305                 if (param1.equals("assertAlert")) {
306                     sb.append("assertEquals");
307                 }
308                 else if (param1.equals("assertNotAlert")) {
309                     sb.append("assertNotEquals");
310                 }
311 
312                 sb.append("(\"");
313                 sb.append(param2);
314                 sb.append("\", selenium.getAlert());");
315             }
316             else if (param1.equals("assertChecked") ||
317                      param1.equals("assertNotChecked")) {
318 
319                 if (param1.equals("assertChecked")) {
320                     sb.append("assertTrue");
321                 }
322                 else if (param1.equals("assertNotChecked")) {
323                     sb.append("assertFalse");
324                 }
325 
326                 sb.append("(selenium.isChecked(\"");
327                 sb.append(param2);
328                 sb.append("\"));");
329             }
330             else if (param1.equals("assertConfirmation")) {
331                 param2 = StringUtil.replace(param2, "?", "[\\\\s\\\\S]");
332 
333                 sb.append("assertTrue(selenium.getConfirmation().matches(\"^");
334                 sb.append(param2);
335                 sb.append("$\"));");
336             }
337             else if (param1.equals("assertLocation") ||
338                      param1.equals("assertNotLocation")) {
339 
340                 if (param1.equals("assertLocation")) {
341                     sb.append("assertEquals");
342                 }
343                 else if (param1.equals("assertNotLocation")) {
344                     sb.append("assertNotEquals");
345                 }
346 
347                 sb.append("(\"");
348                 sb.append(param2);
349                 sb.append("\", selenium.getLocation());");
350             }
351             else if (param1.equals("assertElementNotPresent") ||
352                      param1.equals("assertElementPresent")) {
353 
354                 if (param1.equals("assertElementNotPresent")) {
355                     sb.append("assertFalse");
356                 }
357                 else if (param1.equals("assertElementPresent")) {
358                     sb.append("assertTrue");
359                 }
360 
361                 sb.append("(selenium.isElementPresent(\"");
362                 sb.append(param2);
363                 sb.append("\"));");
364             }
365             else if (param1.equals("assertNotPartialText") ||
366                      param1.equals("assertPartialText")) {
367 
368                 if (param1.equals("assertNotPartialText")) {
369                     sb.append("assertFalse");
370                 }
371                 else if (param1.equals("assertPartialText")) {
372                     sb.append("assertTrue");
373                 }
374 
375                 sb.append("(selenium.isPartialText(\"");
376                 sb.append(param2);
377                 sb.append("\", ");
378 
379                 if (param3.startsWith("${")) {
380                     sb.append("RuntimeVariables.getValue(\"");
381 
382                     String text = param3.substring(2, param3.length() - 1);
383 
384                     sb.append(text);
385                     sb.append("\")");
386                 }
387                 else {
388                     sb.append("\"");
389                     sb.append(param3);
390                     sb.append("\"");
391                 }
392 
393                 sb.append("));");
394             }
395             else if (param1.equals("assertNotSelectedLabel") ||
396                      param1.equals("assertSelectedLabel")) {
397 
398                 if (param1.equals("assertNotSelectedLabel")) {
399                     sb.append("assertNotEquals");
400                 }
401                 else if (param1.equals("assertSelectedLabel")) {
402                     sb.append("assertEquals");
403                 }
404 
405                 sb.append("(");
406 
407                 if (param3.startsWith("${")) {
408                     sb.append("RuntimeVariables.getValue(\"");
409 
410                     String text = param3.substring(2, param3.length() - 1);
411 
412                     sb.append(text);
413                     sb.append("\")");
414                 }
415                 else {
416                     sb.append("\"");
417                     sb.append(param3);
418                     sb.append("\"");
419                 }
420 
421                 sb.append(", selenium.getSelectedLabel(\"");
422                 sb.append(param2);
423                 sb.append("\"));");
424             }
425             else if (param1.equals("assertNotSelectedLabels") ||
426                      param1.equals("assertSelectedLabels")) {
427 
428                 if (param1.equals("assertNotSelectedLabels")) {
429                     sb.append("assertNotEquals");
430                 }
431                 else if (param1.equals("assertSelectedLabels")) {
432                     sb.append("assertEquals");
433                 }
434 
435                 sb.append("(\"");
436                 sb.append(param3);
437                 sb.append("\", join(selenium.getSelectedLabels(\"");
438                 sb.append(param2);
439                 sb.append("\"), \',\'));");
440             }
441             else if (param1.equals("assertNotText") ||
442                      param1.equals("assertText")) {
443 
444                 if (param1.equals("assertNotText")) {
445                     sb.append("assertNotEquals");
446                 }
447                 else if (param1.equals("assertText")) {
448                     sb.append("assertEquals");
449                 }
450 
451                 sb.append("(RuntimeVariables.replace(\"");
452                 sb.append(param3);
453                 sb.append("\"), selenium.getText(\"");
454                 sb.append(param2);
455                 sb.append("\"));");
456             }
457             else if (param1.equals("assertNotValue") ||
458                      param1.equals("assertValue")) {
459 
460                 if (param1.equals("assertNotValue")) {
461                     sb.append("assertNotEquals");
462                 }
463                 else if (param1.equals("assertValue")) {
464                     sb.append("assertEquals");
465                 }
466 
467                 sb.append("(\"");
468                 sb.append(param3);
469                 sb.append("\", selenium.getValue(\"");
470                 sb.append(param2);
471                 sb.append("\"));");
472             }
473             else if (param1.equals("assertNotVisible") ||
474                      param1.equals("assertVisible")) {
475 
476                 if (param1.equals("assertNotVisible")) {
477                     sb.append("assertFalse");
478                 }
479                 else if (param1.equals("assertVisible")) {
480                     sb.append("assertTrue");
481                 }
482 
483                 sb.append("(");
484                 sb.append("selenium.isVisible(\"");
485                 sb.append(param2);
486                 sb.append("\"));");
487             }
488             else if (param1.equals("assertSelectOptions")) {
489                 String[] expectedArray = StringUtil.split(param3);
490 
491                 sb.append("String[] actualArray = ");
492                 sb.append("selenium.getSelectOptions(\"");
493                 sb.append(param2);
494                 sb.append("\");");
495 
496                 sb.append("assertEquals(");
497                 sb.append(expectedArray.length);
498                 sb.append(", actualArray.length);");
499 
500                 for (int i = 0; i < expectedArray.length; i++) {
501                     sb.append("assertEquals(\"");
502                     sb.append(expectedArray[i]);
503                     sb.append("\", actualArray[");
504                     sb.append(i);
505                     sb.append("]);");
506                 }
507             }
508             else if (param1.equals("assertTextNotPresent") ||
509                      param1.equals("assertTextPresent")) {
510 
511                 if (param1.equals("assertTextNotPresent")) {
512                     sb.append("assertFalse");
513                 }
514                 else if (param1.equals("assertTextPresent")) {
515                     sb.append("assertTrue");
516                 }
517 
518                 sb.append("(selenium.isTextPresent(\"");
519                 sb.append(param2);
520                 sb.append("\"));");
521             }
522             else if (param1.equals("captureEntirePageScreenshot")) {
523                 int pos = param2.lastIndexOf("\\");
524 
525                 String dirName = param2.substring(0, pos + 1);
526 
527                 sb.append("FileUtil.mkdirs(RuntimeVariables.replace(\"");
528                 sb.append(dirName);
529                 sb.append("\"));");
530                 sb.append("selenium.captureEntirePageScreenshot(");
531                 sb.append("RuntimeVariables.replace(\"");
532                 sb.append(param2);
533                 sb.append("\"), \"\");");
534             }
535             else if (param1.equals("check") || param1.equals("click") ||
536                      param1.equals("doubleClick") ||
537                      param1.equals("mouseDown") || param1.equals("mouseOver") ||
538                      param1.equals("mouseUp") || param1.equals("open") ||
539                      param1.equals("uncheck") || param1.equals("selectFrame") ||
540                      param1.equals("selectWindow")) {
541 
542                 sb.append("selenium.");
543                 sb.append(param1);
544                 sb.append("(\"");
545                 sb.append(param2);
546                 sb.append("\");");
547             }
548             else if (param1.equals("clickAndWait")) {
549                 sb.append("selenium.click(RuntimeVariables.replace(\"");
550                 sb.append(param2);
551                 sb.append("\"));");
552                 sb.append("selenium.waitForPageToLoad(\"30000\");");
553             }
554             else if (param1.equals("clickAtAndWait") ||
555                      param1.equals("keyPressAndWait") ||
556                      param1.equals("selectAndWait")) {
557 
558                 sb.append("selenium.");
559 
560                 String text = param1.substring(0, param1.length() - 7);
561 
562                 sb.append(text);
563                 sb.append("(\"");
564                 sb.append(param2);
565                 sb.append("\", RuntimeVariables.replace(\"");
566                 sb.append(param3);
567                 sb.append("\"));");
568                 sb.append("selenium.waitForPageToLoad(\"30000\");");
569             }
570             else if (param1.equals("close") || param1.equals("refresh")) {
571                 sb.append("selenium.");
572                 sb.append(param1);
573                 sb.append("();");
574             }
575             else if (param1.equals("dragAndDropToObject")) {
576                 sb.append("selenium.");
577                 sb.append("dragAndDropToObject(\"");
578                 sb.append(param2);
579                 sb.append("\", \"");
580                 sb.append(param3);
581                 sb.append("\");");
582             }
583             else if (param1.equals("echo")) {
584                 sb.append("System.out.println(\"");
585                 sb.append(param2);
586                 sb.append("\");");
587             }
588             else if (param1.equals("gotoIf")) {
589                 String conditional = StringUtil.replace(
590                     param2, new String[] {"${", "}"}, new String[] {"", ""});
591 
592                 sb.append("if (");
593                 sb.append(conditional);
594                 sb.append(") {");
595                 sb.append("label =");
596                 sb.append(labels.get(param3));
597                 sb.append(";");
598                 sb.append("continue;");
599                 sb.append("}");
600             }
601             else if (param1.equals("label")) {
602                 String label = labels.get(param2);
603 
604                 sb.append("case ");
605                 sb.append(label);
606                 sb.append(":");
607             }
608             else if (param1.equals("pause")) {
609                 sb.append("Thread.sleep(");
610                 sb.append(param2);
611                 sb.append(");");
612             }
613             else if (param1.equals("refreshAndWait")) {
614                 sb.append("selenium.refresh();");
615                 sb.append("selenium.waitForPageToLoad(\"30000\");");
616             }
617             else if (param1.equals("store")) {
618                 sb.append("boolean ");
619                 sb.append(param3);
620                 sb.append(" = ");
621 
622                 if (param2.startsWith("eval(")) {
623                     String eval = param2.substring(5, param2.length() - 1);
624 
625                     eval = StringUtil.replace(eval, "'", "\"");
626 
627                     sb.append(eval);
628                 }
629 
630                 sb.append(";");
631             }
632             else if (param1.equals("storeCurrentDay")) {
633                 sb.append("String ");
634                 sb.append(param2);
635                 sb.append(" = selenium.getCurrentDay();");
636 
637                 sb.append("RuntimeVariables.setValue(\"");
638                 sb.append(param2);
639                 sb.append("\", ");
640                 sb.append(param2);
641                 sb.append(");");
642             }
643             else if (param1.equals("storeCurrentMonth")) {
644                 sb.append("String ");
645                 sb.append(param2);
646                 sb.append(" = selenium.getCurrentMonth();");
647 
648                 sb.append("RuntimeVariables.setValue(\"");
649                 sb.append(param2);
650                 sb.append("\", ");
651                 sb.append(param2);
652                 sb.append(");");
653             }
654             else if (param1.equals("storeCurrentYear")) {
655                 sb.append("String ");
656                 sb.append(param2);
657                 sb.append(" = selenium.getCurrentYear();");
658 
659                 sb.append("RuntimeVariables.setValue(\"");
660                 sb.append(param2);
661                 sb.append("\", ");
662                 sb.append(param2);
663                 sb.append(");");
664             }
665             else if (param1.equals("storeIncrementedText")) {
666                 sb.append("String ");
667                 sb.append(param3);
668                 sb.append(" = selenium.getIncrementedText(\"");
669                 sb.append(param2);
670                 sb.append("\");");
671 
672                 sb.append("RuntimeVariables.setValue(\"");
673                 sb.append(param3);
674                 sb.append("\", ");
675                 sb.append(param3);
676                 sb.append(");");
677             }
678             else if (param1.equals("storeText")) {
679                 sb.append("String ");
680                 sb.append(param3);
681                 sb.append(" = selenium.getText(\"");
682                 sb.append(param2);
683                 sb.append("\");");
684 
685                 sb.append("RuntimeVariables.setValue(\"");
686                 sb.append(param3);
687                 sb.append("\", ");
688                 sb.append(param3);
689                 sb.append(");");
690             }
691             else if (param1.equals("verifyElementNotPresent") ||
692                      param1.equals("verifyElementPresent")) {
693 
694                 if (param1.equals("verifyElementNotPresent")) {
695                     sb.append("verifyFalse");
696                 }
697                 else if (param1.equals("verifyElementPresent")) {
698                     sb.append("verifyTrue");
699                 }
700 
701                 sb.append("(selenium.isElementPresent(\"");
702                 sb.append(param2);
703                 sb.append("\"));");
704             }
705             else if (param1.equals("verifyTextNotPresent") ||
706                      param1.equals("verifyTextPresent")) {
707 
708                 if (param1.equals("verifyTextNotPresent")) {
709                     sb.append("verifyFalse");
710                 }
711                 else if (param1.equals("verifyTextPresent")) {
712                     sb.append("verifyTrue");
713                 }
714 
715                 sb.append("(selenium.isTextPresent(\"");
716                 sb.append(param2);
717                 sb.append("\"));");
718             }
719             else if (param1.equals("verifyTitle")) {
720                 sb.append("verifyEquals(\"");
721                 sb.append(param2);
722                 sb.append("\", selenium.getTitle());");
723             }
724             else if (param1.equals("waitForElementNotPresent") ||
725                      param1.equals("waitForElementPresent") ||
726                      param1.equals("waitForNotPartialText") ||
727                      param1.equals("waitForNotSelectedLabel") ||
728                      param1.equals("waitForNotTable") ||
729                      param1.equals("waitForNotText") ||
730                      param1.equals("waitForNotValue") ||
731                      param1.equals("waitForNotVisible") ||
732                      param1.equals("waitForPartialText") ||
733                      param1.equals("waitForSelectedLabel") ||
734                      param1.equals("waitForTable") ||
735                      param1.equals("waitForText") ||
736                      param1.equals("waitForTextNotPresent") ||
737                      param1.equals("waitForTextPresent") ||
738                      param1.equals("waitForValue") ||
739                      param1.equals("waitForVisible")) {
740 
741                 sb.append("for (int second = 0;; second++) {");
742                 sb.append("if (second >= 60) {");
743                 sb.append("fail(\"timeout\");");
744                 sb.append("}");
745 
746                 sb.append("try {");
747                 sb.append("if (");
748 
749                 if (param1.equals("waitForElementNotPresent") ||
750                     param1.equals("waitForNotPartialText") ||
751                     param1.equals("waitForNotSelectedLabel") ||
752                     param1.equals("waitForNotTable") ||
753                     param1.equals("waitForNotText") ||
754                     param1.equals("waitForNotValue") ||
755                     param1.equals("waitForNotVisible") ||
756                     param1.equals("waitForTextNotPresent")) {
757 
758                     sb.append("!");
759                 }
760 
761                 if (param1.equals("waitForElementNotPresent") ||
762                     param1.equals("waitForElementPresent")) {
763 
764                     sb.append("selenium.isElementPresent");
765                     sb.append("(\"");
766                     sb.append(param2);
767                     sb.append("\")");
768                 }
769                 else if (param1.equals("waitForNotPartialText") ||
770                          param1.equals("waitForPartialText")) {
771 
772                     sb.append("selenium.isPartialText(\"");
773                     sb.append(param2);
774                     sb.append("\", ");
775 
776                     if (param3.startsWith("${")) {
777                         sb.append("RuntimeVariables.getValue(\"");
778 
779                         String text = param3.substring(2, param3.length() - 1);
780 
781                         sb.append(text);
782                         sb.append("\")");
783                     }
784                     else {
785                         sb.append("\"");
786                         sb.append(param3);
787                         sb.append("\"");
788                     }
789 
790                     sb.append(")");
791                 }
792                 else if (param1.equals("waitForNotSelectedLabel") ||
793                          param1.equals("waitForSelectedLabel"))
794                 {
795 
796                     if (param3.startsWith("${")) {
797                         sb.append("RuntimeVariables.getValue(\"");
798 
799                         String text = param3.substring(2, param3.length() - 1);
800 
801                         sb.append(text);
802                         sb.append("\")");
803                     }
804                     else {
805                         sb.append("\"");
806                         sb.append(param3);
807                         sb.append("\"");
808                     }
809 
810                     sb.append(".equals(selenium.getSelectedLabel(\"");
811                     sb.append(param2);
812                     sb.append("\"))");
813                 }
814                 else if (param1.equals("waitForNotTable") ||
815                          param1.equals("waitForTable")) {
816 
817                     sb.append("StringPool.BLANK.equals(selenium.getTable(\"");
818                     sb.append(param2);
819                     sb.append("\"))");
820                 }
821                 else if (param1.equals("waitForNotText") ||
822                          param1.equals("waitForText")) {
823 
824                     sb.append("RuntimeVariables.replace(\"");
825                     sb.append(param3);
826                     sb.append("\").equals(selenium.getText(\"");
827                     sb.append(param2);
828                     sb.append("\"))");
829                 }
830                 else if (param1.equals("waitForNotValue") ||
831                          param1.equals("waitForValue")) {
832 
833                     sb.append("RuntimeVariables.replace(\"");
834                     sb.append(param3);
835                     sb.append("\").equals(selenium.getValue(\"");
836                     sb.append(param2);
837                     sb.append("\"))");
838                 }
839                 else if (param1.equals("waitForNotVisible") ||
840                          param1.equals("waitForVisible")) {
841 
842                     sb.append("selenium.isVisible");
843                     sb.append("(\"");
844                     sb.append(param2);
845                     sb.append("\")");
846                 }
847                 else if (param1.equals("waitForTextNotPresent") ||
848                          param1.equals("waitForTextPresent")) {
849 
850                     sb.append("selenium.isTextPresent");
851                     sb.append("(\"");
852                     sb.append(param2);
853                     sb.append("\")");
854                 }
855 
856                 sb.append(") {");
857                 sb.append("break;");
858                 sb.append("}");
859                 sb.append("}");
860                 sb.append("catch (Exception e) {");
861                 sb.append("}");
862 
863                 sb.append("Thread.sleep(1000);");
864                 sb.append("}");
865             }
866             else {
867                 System.out.println(param1 + " was not translated");
868             }
869         }
870 
871         if (labels.size() > 0) {
872             sb.append("case 100:");
873             sb.append("label = -1;");
874             sb.append("}");
875             sb.append("}");
876         }
877 
878         sb.append("}");
879         sb.append("}");
880 
881         String content = sb.toString();
882 
883         ServiceBuilder.writeFile(new File(testFileName), content);
884     }
885 
886     private static final String[] _FIX_PARAM_OLD_SUBS = new String[] {
887         "\\\\n", "<br />"
888     };
889 
890     private static final String[] _FIX_PARAM_NEW_SUBS = new String[] {
891         "\\n", "\\n"
892     };
893 
894 }