PMC:QA:Improve sales order POC with Sahi document2
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.
Contents
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
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
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:
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:
"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 on toobar
but its id is still dynamic with ZkwebuiIDGenerator integration.
First time:
Second time:
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:
still existed processing problem:"the status of adempiere is "Processing" all the while",can't complete processing and go back main page
This problem detailed in document PMC:QA:Improve sales order POC with Sahi
Links
* Go back to PMC:QA