IDEMPIERE-92 Implement Selenium testing framework. Fixed _zk_locator for id with space. Added execution of arbitrary zk widget command support to zk fixture.

This commit is contained in:
Heng Sin Low 2013-02-14 21:03:53 +08:00
parent 1c718c74a9
commit ac0d909eac
3 changed files with 52 additions and 8 deletions

View File

@ -57,9 +57,16 @@ public class AdempiereIdGenerator implements IdGenerator {
.append(AdempiereWebUI.WIDGET_INSTANCE_NAME) .append(AdempiereWebUI.WIDGET_INSTANCE_NAME)
.append("=\'").append(attribute).append("']"); .append("=\'").append(attribute).append("']");
} }
} else {
if (prefix.indexOf(" ") > 0) {
String widgetName = getWidgetName(comp.getWidgetClass());
locatorBuilder.append("@")
.append(widgetName).append("[id")
.append("=\'").append(prefix).append("']");
} else { } else {
locatorBuilder.append("$").append(prefix); locatorBuilder.append("$").append(prefix);
} }
}
if (prefix == null || prefix.length() == 0) { if (prefix == null || prefix.length() == 0) {
prefix = DEFAULT_ZK_COMP_PREFIX; prefix = DEFAULT_ZK_COMP_PREFIX;
@ -74,7 +81,12 @@ public class AdempiereIdGenerator implements IdGenerator {
String id = parent.getId(); String id = parent.getId();
if (id != null && id.length() > 0) { if (id != null && id.length() > 0) {
builder.insert(0, id+"_"); builder.insert(0, id+"_");
if (id.indexOf(" ") > 0) {
String widgetName = getWidgetName(parent.getWidgetClass());
locatorBuilder.insert(0, "@"+widgetName+"[id=\'"+id+"\'] ");
} else {
locatorBuilder.insert(0, "$"+id+" "); locatorBuilder.insert(0, "$"+id+" ");
}
} else { } else {
String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
if (attribute != null && attribute.length() > 0) { if (attribute != null && attribute.length() > 0) {
@ -161,9 +173,16 @@ public class AdempiereIdGenerator implements IdGenerator {
.append(AdempiereWebUI.WIDGET_INSTANCE_NAME) .append(AdempiereWebUI.WIDGET_INSTANCE_NAME)
.append("=\'").append(attribute).append("']"); .append("=\'").append(attribute).append("']");
} }
} else {
if (prefix.indexOf(" ") > 0) {
String widgetName = getWidgetName(comp.getWidgetClass());
locatorBuilder.append("@")
.append(widgetName).append("[id")
.append("=\'").append(prefix).append("']");
} else { } else {
locatorBuilder.append("$").append(prefix); locatorBuilder.append("$").append(prefix);
} }
}
if (prefix == null || prefix.length() == 0) { if (prefix == null || prefix.length() == 0) {
locatorBuilder.append("@").append(getWidgetName(comp.getWidgetClass())); locatorBuilder.append("@").append(getWidgetName(comp.getWidgetClass()));
@ -175,7 +194,12 @@ public class AdempiereIdGenerator implements IdGenerator {
if (parent instanceof IdSpace) { if (parent instanceof IdSpace) {
String id = parent.getId(); String id = parent.getId();
if (id != null && id.length() > 0) { if (id != null && id.length() > 0) {
if (id.indexOf(" ") > 0) {
String widgetName = getWidgetName(parent.getWidgetClass());
locatorBuilder.insert(0, "@"+widgetName+"[id=\'"+id+"\'] ");
} else {
locatorBuilder.insert(0, "$"+id+" "); locatorBuilder.insert(0, "$"+id+" ");
}
} else { } else {
String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); String attribute = parent.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME);
if (attribute != null && attribute.length() > 0) { if (attribute != null && attribute.length() > 0) {

View File

@ -47,6 +47,7 @@ public class ZkFixture extends SpiderFixture {
} }
// --------- ComboBox --------- // --------- ComboBox ---------
@SimpleAction(wiki = "|''<i>combobox</i>''|zk locator|''<i>selected value</i>''|", tooltip = "Return current selected value")
public String comboboxSelectedValue(String locator) { public String comboboxSelectedValue(String locator) {
Widget widget = new Widget(locator); Widget widget = new Widget(locator);
return (String) widget.eval(webDriver, "getValue()"); return (String) widget.eval(webDriver, "getValue()");
@ -88,6 +89,7 @@ public class ZkFixture extends SpiderFixture {
return false; return false;
} }
@SimpleAction(wiki= "|''<i>combobox</i>''|zk locator|''<i>set text</i>''|text|", tooltip = "Enter text into combobox and fire onChange event")
public boolean comboboxSetText(String locator, String text) { public boolean comboboxSetText(String locator, String text) {
Widget widget = new Widget(locator); Widget widget = new Widget(locator);
widget.execute(webDriver, "setValue('"+text+"', true)"); widget.execute(webDriver, "setValue('"+text+"', true)");
@ -199,13 +201,22 @@ public class ZkFixture extends SpiderFixture {
} }
} }
@SimpleAction(wiki="|''<i>focus</i>''|xpath, id or other locator|", tooltip= "Set focus to a zk widget")
public void focus(String locator) { public void focus(String locator) {
Widget widget = new Widget(locator); Widget widget = new Widget(locator);
widget.execute(webDriver, "focus()"); widget.execute(webDriver, "focus_(100)");
} }
protected String getEval(String script) { @SimpleAction(wiki = "|''<i>with widget</i>''|zk locator|''<i>execute</i>''|command|", tooltip = "Execute zk widget command")
return String.valueOf(executeJavaScript("return ("+ script+");")); public void withWidgetExecute(String locator, String command) {
Widget widget = new Widget(locator);
widget.execute(webDriver, command);
}
@SimpleAction(wiki = "|''<i>with widget</i>''|zk locator|''<i>eval</i>''|command|", tooltip = "Execute zk widget command and return the result")
public Object withWidgetEval(String locator, String command) {
Widget widget = new Widget(locator);
return widget.eval(webDriver, command);
} }
/** /**
@ -214,13 +225,20 @@ public class ZkFixture extends SpiderFixture {
* and schedulers. The thread does not lose ownership of any monitors. * and schedulers. The thread does not lose ownership of any monitors.
* @param millis the length of time to sleep in milliseconds. * @param millis the length of time to sleep in milliseconds.
*/ */
protected void sleep(long millis) { @SimpleAction(wiki = "|''<i>sleep</i>''|millisecond|", tooltip = "sleep")
public void sleep(long millis) {
try { try {
Thread.sleep(millis); Thread.sleep(millis);
} catch (InterruptedException e) { } catch (InterruptedException e) {
} }
} }
protected String getEval(String script) {
return String.valueOf(executeJavaScript("return ("+ script+");"));
}
class ZkFinder implements Finder { class ZkFinder implements Finder {
@Override @Override

View File

@ -53,6 +53,7 @@ public class Widget extends By {
public void execute(WebDriver driver, String command) { public void execute(WebDriver driver, String command) {
JavascriptExecutor executor = (JavascriptExecutor) driver; JavascriptExecutor executor = (JavascriptExecutor) driver;
StringBuilder builder = getWidgetLocatorScript(locator); StringBuilder builder = getWidgetLocatorScript(locator);
command = command.replace("'", "\\'");
builder.append(".").append(command).append(";"); builder.append(".").append(command).append(";");
executor.executeScript(builder.toString()); executor.executeScript(builder.toString());
} }
@ -60,6 +61,7 @@ public class Widget extends By {
public Object eval(WebDriver driver, String command) { public Object eval(WebDriver driver, String command) {
JavascriptExecutor executor = (JavascriptExecutor) driver; JavascriptExecutor executor = (JavascriptExecutor) driver;
StringBuilder builder = getWidgetLocatorScript(locator); StringBuilder builder = getWidgetLocatorScript(locator);
command = command.replace("'", "\\'");
builder.insert(0, "return "); builder.insert(0, "return ");
builder.append(".").append(command).append(";"); builder.append(".").append(command).append(";");
return executor.executeScript(builder.toString()); return executor.executeScript(builder.toString());