PMC:QA:Improve sales order POC with Sahi document2

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

In document PMC:QA:Improve sales order POC with Sahi,test Adempiere via sahi has some problem.It is a bit of difficult to identify the position of html's elements.

Carlos Ruiz has done some improvement that generate Adempiere ZK webui id. this way we can easily identify fields, if we do a partial matching of the ID.

ZkwebuiIDGenerator_v3.patch

Index: zkwebui/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java
===================================================================
--- zkwebui/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java	(revision 0)
+++ zkwebui/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java	(revision 0)
@@ -0,0 +1,38 @@
+package org.adempiere.webui;
+
+import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.Desktop;
+import org.zkoss.zk.ui.Page;
+import org.zkoss.zk.ui.sys.IdGenerator;
+
+public class AdempiereIdGenerator implements IdGenerator {
+
+	@Override
+	public String nextComponentUuid(Desktop desktop, Component comp) {
+		String id = (String) comp.getAttribute("zk_component_ID");
+		if (id != null && id.length() > 0)
+			return id;
+		String prefix = (String) comp.getAttribute("zk_component_prefix");
+		if (prefix == null || prefix.length() == 0)
+			prefix = "zk_comp_";
+		int 	i = Integer.parseInt(desktop.getAttribute("Id_Num").toString());
+		i++;// Start from 1
+		desktop.setAttribute("Id_Num", String.valueOf(i));
+		return prefix + i;
+	}
+
+	@Override
+	public String nextDesktopId(Desktop desktop) {
+		if (desktop.getAttribute("Id_Num") == null) {
+			String number = "0";
+			desktop.setAttribute("Id_Num", number);
+		}
+		return null;
+	}
+
+	@Override
+	public String nextPageUuid(Page page) {
+		return null;
+	}
+
+}
Index: zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java
===================================================================
--- zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java	(revision 12088)
+++ zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java	(working copy)
@@ -92,6 +92,7 @@
         }
 
         this.setComponent(comp);
+        comp.setAttribute("zk_component_ID", "Field_" + gridField.getColumnName() + "_" + gridField.getAD_Tab_ID() + "_" + gridField.getWindowNo());
         this.gridField = gridField;
         this.setMandatory(gridField.isMandatory(false));
         this.readOnly = gridField.isReadOnly();
Index: zkwebui/WEB-INF/zk.xml
===================================================================
--- zkwebui/WEB-INF/zk.xml	(revision 12088)
+++ zkwebui/WEB-INF/zk.xml	(working copy)
@@ -40,6 +40,10 @@
 		</system-config>
 	-->
 
+	<system-config>
+		<id-generator-class>org.adempiere.webui.AdempiereIdGenerator</id-generator-class>
+	</system-config>
+
 	<!--
 		polling - org.zkoss.zkex.ui.impl.PollingServerPush
 		comet - org.zkoss.zkmax.ui.comet.CometServerPush ( enterprise edition only )  

Install ZkwebuiIDGenerator

Adempiere without ZkwebuiIDGenerator

Zkid.png

Install ZkwebuiIDGenerator_v3.patch

install patch at adempiere souce code directory.

patch -p0 < /path/ZkwebuiIDGenerator_v3.patch

Rebuild Adempiere source code

# cd utils_dev utils_dev 
#./RUN_build.sh

Reinstall Adempiere

# cd Adempiere Adempiere 
# ./RUN_setup.sh

Adempiere with ZkwebuiIDGenerator

start Adempiere,now let's review Adempiere html code

Zkid1.png

POC

sahi test poc

Sahi scripts for Adempiere login

adlogin.sah

_setValue(_textbox("zk_comp_5"), "SuperUser");
 _assertEqual("SuperUser",_getText(_textbox("zk_comp_5"))); 
_setValue(_password("zk_comp_19"), "System"); 
_assertEqual("System",_getText(_password("zk_comp_19"))); 
_click(_cell("English")); _assertExists(_cell("English")); 
_assertExists(_image("zk_comp_68!hvig")); 
_click(_image("zk_comp_68!hvig")); 
_assertExists(_image("spacer.gif")); 
_click(_image("spacer.gif")); 
_assertExists(_cell("GardenWorld Admin"));
 _click(_cell("GardenWorld Admin")); 
_assertExists(_image("spacer.gif[1]")); 
_click(_image("spacer.gif[1]")); 
_assertExists(_cell("GardenWorld")); 
_click(_cell("GardenWorld")); 
_assertExists(_image("zk_comp_120!hvig")); 
_click(_image("zk_comp_120!hvig"));

test result:

Zkid2.png

Sahi scripts for create SO order

_include("adlogin.sah");
_wait(1000); 
_navigateTo("http://192.168.1.212/webui/",true); 
_assertExists(_span("zk_comp_587!open"));
_click(_span("zk_comp_587!open")); 
_assertExists(_span("zk_comp_616!open")); 
_click(_span("zk_comp_616!open"));
_assertExists(_image("zk_comp_659!hvig")); 
_click(_image("zk_comp_659!hvig")); 
_assertExists(_image("zk_comp_2073!hvig")); 
_click(_image("zk_comp_2073!hvig")); 
...

still has problem:

Zkid12.png

"zk_comp_2073!hvig" is the id of image "New24.png" which on the toolbar.

I found some element's id is still dynamic.

Example:

To create a new record,should click image Zkid8.png on toobar

but its id is still dynamic with ZkwebuiIDGenerator integration.

First time:

Zkid5.png

Second time:

Zkid6.png

And can find all the problems of zk's id by the records which recorded by Sahi Controller.

login script:

We can get same records

first time record second time record description
_setValue(_textbox("zk_comp_5"), "SuperUser"); _setValue(_textbox("zk_comp_5"), "SuperUser"); UserID
_setValue(_password("zk_comp_19"), "System"); _setValue(_password("zk_comp_19"), "System"); Password
_click(_image("spacer.gif")); _click(_image("spacer.gif"));
_click(_cell("English")); _click(_cell("English")); language
_click(_image("zk_comp_68!hvig")); _click(_image("zk_comp_68!hvig")); Ok button
_click(_image("spacer.gif")); _click(_image("spacer.gif"));
_click(_cell("GardenWorld Admin")); _click(_cell("GardenWorld Admin"));
_click(_image("spacer.gif[1]")); _click(_image("spacer.gif[1]"));
_click(_cell("GardenWorld")); _click(_cell("GardenWorld"));
_click(_image("zk_comp_120!hvig")); _click(_image("zk_comp_120!hvig")); Ok button

Order creation scripts:

get different records.

first time test second time test description
_click(_span("zk_comp_726!open")); _click(_span("zk_comp_726!open")); Menu Quote-to-Invoice
_click(_span("zk_comp_755!open")); _click(_span("zk_comp_755!open")); Menu Sales Orders
_click(_div("Sales Order")); _click(_div("Sales Order")); Open sales order window
_click(_image("zk_comp_798!hvig")); _click(_image("zk_comp_2212!hvig")); image "New24.png" to create a new record
_click(_image("spacer.gif[2]")); _click(_image("spacer.gif[2]"));
_click(_cell("HQ")); _click(_cell("HQ")); Organization
_click(_image("spacer.gif[3]")); _click(_image("spacer.gif[3]"));
_click(_cell("POS Order")); _click(_cell("POS Order")); Target document type
_click(_image("zk_comp_3033!hvig")); _click(_image("zk_comp_2326!hvig")); Business partner image
_click(_image("zk_comp_3673!hvig")); _click(_image("zk_comp_2966!hvig")); Refresh button "Refresh24.png"
_click(_div("C&W")); _click(_div("C&W")); select bpartner "C&W"
_click(_image("zk_comp_3679!hvig")); _click(_image("zk_comp_2972!hvig")); Ok button "Ok24.png"
_click(_image("spacer.gif[14]")); _click(_image("spacer.gif[14]"));
_click(_cell("HQ Warehouse")); _click(_cell("HQ Warehouse"));
_click(_image("spacer.gif[23]")); _click(_image("spacer.gif[23]"));
_click(_cell("Standard[1]")); _click(_cell("Standard[1]"));
_click(_image("spacer.gif[26]")); _click(_image("spacer.gif[26]"));
_click(_cell("GardenAdmin")); _click(_cell("GardenAdmin"));
_click(_image("zk_comp_2923!hvig")); _click(_image("zk_comp_2216!hvig")); save image on the toolbar
_click(_submit("Order Line")); _click(_submit("Order Line")); select "Order Line" tab
_click(_image("zk_comp_4167!hvig")); _click(_image("zk_comp_3460!hvig")); select Product,product image
_click(_image("zk_comp_4959!hvig")); _click(_image("zk_comp_4252!hvig")); Refresh button
_click(_div("Mary")); _click(_div("Mary")); select product "Mary"
_click(_image("zk_comp_4966!hvig")); _click(_image("zk_comp_4259!hvig")); Ok button
_click(_image("zk_comp_2923!hvig")); _click(_image("zk_comp_2216!hvig")); Save image on the toolbar
_click(_submit("Order")); _click(_submit("Order")); back to "Order" tab
_click(_cell("Complete[1]")); _click(_cell("Complete[1]")); complete order
_click(_image("zk_comp_5743!hvig")); _click(_image("zk_comp_5036!hvig")); Ok button to confirm complete the order


And if we open two "Sales order" window,we can find the same element has different id.

first window second window description
_click(_image("zk_comp_798!hvig")); _click(_image("zk_comp_2919!hvig")); image "New24.png" to create a new record
_click(_image("spacer.gif[2]")); _click(_image("spacer.gif[40]")); image "spacer.gif"
_click(_cell("HQ")); _click(_cell("HQ[1]")); Organization

Some scripts can't pass test,instead of them by using old scripts(recorded by sahi controller).

All the Sahi scripts for create SO order

_include("adlogin.sah");
_wait(1000);
_navigateTo("http://192.168.1.212/webui/",true);
_assertExists(_span("zk_comp_587!open"));
_click(_span("zk_comp_587!open"));
_assertExists(_span("zk_comp_616!open"));
_click(_span("zk_comp_616!open"));
_assertExists(_image("zk_comp_659!hvig"));
_click(_image("zk_comp_659!hvig"));
//_assertExists(_image("zk_comp_2073!hvig"));
//_click(_image("zk_comp_2073!hvig"));
_assertExists(_image("New24.png"));
_click(_image("New24.png"));
_assertExists(_image("spacer.gif[2]"));
_click(_image("spacer.gif[2]"));
_assertExists(_cell("HQ"));
_click(_cell("HQ"));
_assertExists(_image("spacer.gif[3]"));
_click(_image("spacer.gif[3]"));
_assertExists(_cell("POS Order"));
_click(_cell("POS Order"));
//_assertExists(_image("zk_comp_2187!hvig"));
//_click(_image("zk_comp_2187!hvig"));
//_assertExists(_image("zk_comp_2955!hvig"));
//_click(_image("zk_comp_2955!hvig"));
//_assertExists(_div("C&W"));
//_click(_div("C&W"));
//_assertExists(_image("zk_comp_2961!hvig"));
//_click(_image("zk_comp_2961!hvig"));
//_assertExists(_textbox("zk_comp_6271"));
//_setValue(_textbox("zk_comp_6271"), "C&W");
//_assertExists(_textbox(8));
//_setValue(_textbox(8), "C&W");
_assertExists(_image("BPartner10.png"));
_click(_image("BPartner10.png"));
_assertExists(_image("Refresh24.png"));
_click(_image("Refresh24.png[1]"));
_assertExists(_div("C&W"));
_click(_div("C&W"));
_assertExists(_image("Ok24.png"));
_click(_image("Ok24.png"));
_assertExists(_image("spacer.gif[14]"));
_click(_image("spacer.gif[14]"));
_assertExists(_cell("HQ Warehouse"));
_click(_cell("HQ Warehouse"));
_assertExists(_image("spacer.gif[23]"));
_click(_image("spacer.gif[23]"));
_assertExists(_cell("Standard[1]"));
_click(_cell("Standard[1]"));
_assertExists(_image("spacer.gif[26]"));
_click(_image("spacer.gif[26]"));
_assertExists(_cell("GardenAdmin"));
_click(_cell("GardenAdmin"));
//_assertExists(_image("zk_comp_2207!hvig"));
//_click(_image("zk_comp_2207!hvig"));
_assertExists(_image("Save24.png"));
_click(_image("Save24.png"));
_assertExists(_submit("Order Line"));
_click(_submit("Order Line"));
//_assertExists(_image("zk_comp_3449!hvig"));
//_click(_image("zk_comp_3449!hvig"));
//_assertExists(_image("zk_comp_4241!hvig"));
//_click(_image("zk_comp_4241!hvig"));
//_assertExists(_div("Mary"));
//_click(_div("Mary"));
//_assertExists(_image("zk_comp_4248!hvig"));
//_click(_image("zk_comp_4248!hvig"));
_assertExists(_image("Product10.png"));
_click(_image("Product10.png"));
_assertExists(_image("Refresh24.png[1]"));
_click(_image("Refresh24.png[1]"));
_assertExists(_div("Mary"));
_click(_div("Mary"));
_assertExists(_image("Ok24.png"));
_click(_image("Ok24.png"));
_assertExists(_image("spacer.gif[50]"));
_click(_image("spacer.gif[50]"));
_assertExists(_cell("Standard[3]"));
_click(_cell("Standard[3]"));
//_assertExists(_image("zk_comp_2207!hvig"));
//_click(_image("zk_comp_2207!hvig"));
_assertExists(_image("Save24.png"));
_click(_image("Save24.png"));
_assertExists(_submit("Order"));
_click(_submit("Order"));
//_assertEqual("Drafted",_getText(_textbox("Field_DocStatus_186_1!real"))));
_assertEqual("Drafted",_getText(_textbox(46)));
_assertExists(_cell("Complete[1]"));
_click(_cell("Complete[1]"));
_wait(5000);
//_assertExists(_image("zk_comp_5025!hvig"));
//_click(_image("zk_comp_5025!hvig"));
_assertExists(_image("Ok24.png"));
_click(_image("Ok24.png"));
_wait(120000);
//_assertEqual("Completed",_getText(_textbox("Field_DocStatus_186_1!real"))));
_assertEqual("Completed",_getText(_textbox(46)));

test result:

Zkid10.png

Zkid11.png

still existed processing problem:"the status of adempiere is "Processing" all the while",can't complete processing and go back main page

Zkid9.png

This problem detailed in document PMC:QA:Improve sales order POC with Sahi

Links

   * Go back to PMC:QA