2012-12-13 02:35:08 +07:00
/ * *
*
* /
package fitlibrary.zk ;
import java.util.List ;
import org.idempiere.ui.zk.selenium.Widget ;
import org.idempiere.ui.zk.selenium.Zk ;
import org.openqa.selenium.By ;
import org.openqa.selenium.WebElement ;
2013-03-22 14:55:04 +07:00
import org.openqa.selenium.interactions.Actions ;
2012-12-13 02:35:08 +07:00
import fitlibrary.annotation.SimpleAction ;
import fitlibrary.spider.AbstractSpiderFixture ;
import fitlibrary.spider.Finder ;
import fitlibrary.spider.SpiderFixture ;
2013-04-10 11:44:16 +07:00
import fitlibrary.spider.polling.PollForWithError ;
2012-12-13 02:35:08 +07:00
/ * *
* @author hengsin
*
* /
public class ZkFixture extends SpiderFixture {
private Finder _finder ;
/ * *
*
* /
public ZkFixture ( ) {
super ( ) ;
_finder = getFinder ( ) ;
setElementFinder ( new ZkFinder ( ) ) ;
}
// --------- CHECKBOX ---------
@Override
public boolean checkbox ( String locator ) {
locator = locator + " ~ input " ;
return super . checkbox ( locator ) ;
}
@Override
public boolean withSelect ( String locator , final boolean select ) {
2013-04-10 11:44:16 +07:00
Widget widget = new Widget ( locator ) ;
final WebElement element = widget . $n ( webDriver , " real " ) ;
if ( element . isSelected ( ) ) {
if ( ! select ) {
element . click ( ) ;
}
} else {
if ( select ) {
element . click ( ) ;
}
}
2012-12-13 02:35:08 +07:00
2013-04-10 11:44:16 +07:00
ensureBecomes ( new PollForWithError ( ) {
@Override
public boolean matches ( ) {
return element . isSelected ( ) = = select ;
}
@Override
public String error ( ) {
return " Not selected correctly " ;
}
} ) ;
return true ;
2012-12-13 02:35:08 +07:00
}
// --------- ComboBox ---------
2013-02-14 20:03:53 +07:00
@SimpleAction ( wiki = " |''<i>combobox</i>''|zk locator|''<i>selected value</i>''| " , tooltip = " Return current selected value " )
2012-12-13 02:35:08 +07:00
public String comboboxSelectedValue ( String locator ) {
Widget widget = new Widget ( locator ) ;
2013-01-11 12:24:07 +07:00
return ( String ) widget . eval ( webDriver , " getValue() " ) ;
2012-12-13 02:35:08 +07:00
}
2012-12-13 16:22:56 +07:00
@SimpleAction ( wiki = " |''<i>combobox</i>''|xpath, id or other locator|''<i>select item</i>''|label of item| " , tooltip = " Changes the selected item in the given comboBox. " )
2012-12-13 02:35:08 +07:00
public boolean comboboxSelectItem ( String locator , String label ) {
Widget widget = new Widget ( locator ) ;
2013-01-11 12:24:07 +07:00
widget . execute ( webDriver , " open() " ) ;
2012-12-13 16:22:56 +07:00
waitResponse ( ) ;
2013-01-11 12:24:07 +07:00
List < WebElement > list = webDriver . findElements ( Zk . jq ( locator + " @comboitem " ) ) ;
if ( list ! = null & & list . size ( ) > 0 ) {
for ( WebElement element : list ) {
2013-01-18 14:27:07 +07:00
widget = new Widget ( " # " + element . getAttribute ( " id " ) ) ;
String elementLabel = ( String ) widget . eval ( webDriver , " getLabel() " ) ;
if ( elementLabel . equals ( label ) ) {
2013-01-11 12:24:07 +07:00
element . click ( ) ;
waitResponse ( ) ;
String selected = comboboxSelectedValue ( locator ) ;
return label . equals ( selected ) ;
}
}
}
return false ;
2012-12-13 02:35:08 +07:00
}
2012-12-13 16:22:56 +07:00
@SimpleAction ( wiki = " |''<i>combobox</i>''|xpath, id or other locator|''<i>select item at</i>''|index| " , tooltip = " Changes the selected item to the nth one, in the given comboBox. " )
2012-12-13 02:35:08 +07:00
public boolean comboboxSelectItemAt ( String locator , int index ) {
Widget widget = new Widget ( locator ) ;
widget . execute ( webDriver , " open() " ) ;
List < WebElement > list = webDriver . findElements ( Zk . jq ( locator + " @Comboitem " ) ) ;
if ( list ! = null & & index < list . size ( ) ) {
WebElement element = list . get ( index ) ;
element . click ( ) ;
Widget item = new Widget ( " # " + element . getAttribute ( " id " ) ) ;
String label = ( String ) item . eval ( webDriver , " getLabel() " ) ;
return label . equals ( comboboxSelectedValue ( locator ) ) ;
}
return false ;
}
2013-01-11 12:24:07 +07:00
2013-02-14 20:03:53 +07:00
@SimpleAction ( wiki = " |''<i>combobox</i>''|zk locator|''<i>set text</i>''|text| " , tooltip = " Enter text into combobox and fire onChange event " )
2013-01-11 12:24:07 +07:00
public boolean comboboxSetText ( String locator , String text ) {
Widget widget = new Widget ( locator ) ;
widget . execute ( webDriver , " setValue(' " + text + " ', true) " ) ;
widget . execute ( webDriver , " fireOnChange() " ) ;
WebElement element = widget . $n ( webDriver , " real " ) ;
element . click ( ) ;
waitResponse ( ) ;
return text . equals ( comboboxSelectedValue ( locator ) ) ;
}
2012-12-13 16:22:56 +07:00
// ---- Tabbox ----
@SimpleAction ( wiki = " |''<i>tabbox</i>''|xpath, id or other locator|''<i>select tab at</i>''|index| " , tooltip = " Changes the selected tab to the nth one, in the given tabbox. " )
public void tabboxSelectTabAt ( String locator , int index ) {
Widget widget = new Widget ( locator ) ;
WebElement element = ( WebElement ) widget . eval ( webDriver , " getTabs().getChildAt( " + index + " ).$n('cnt'); " ) ;
element . click ( ) ;
}
@SimpleAction ( wiki = " |''<i>tabbox</i>''|xpath, id or other locator|''<i>select tab</i>''|label| " , tooltip = " Changes the selected tab in the given tabbox. " )
public void tabboxSelectTab ( String locator , String label ) {
Widget widget = new Widget ( locator + " @tab[label= \" " + label + " \" ] " ) ;
widget . $n ( webDriver , " cnt " ) . click ( ) ;
}
@SimpleAction ( wiki = " |''<i>selected tab</i>''|xpath, id or other locator| " , tooltip = " Get the label of the selected tab in the given tabbox. " )
public String selectedTab ( String locator ) {
Widget widget = new Widget ( locator ) ;
return ( String ) widget . eval ( webDriver , " getSelectedTab().getLabel() " ) ;
}
2012-12-19 15:23:33 +07:00
//--- Search (lookup) --
@SimpleAction ( wiki = " |''<i>lookup</i>''|xpath, id or other locator|''<i>search</i>''|value| " , tooltip = " Search lookup with value. " )
public void lookupSearch ( String locator , String value ) {
Widget widget = new Widget ( locator + " @textbox " ) ;
WebElement element = widget . findElement ( webDriver ) ;
element . click ( ) ;
widget . execute ( webDriver , " setValue(' " + value + " ') " ) ;
widget . execute ( webDriver , " fireOnChange() " ) ;
}
// ---- window ( tab ) ---
@SimpleAction ( wiki = " |''<i>open window</i>''|menu label| " , tooltip = " Open window with label. " )
2013-01-18 14:27:07 +07:00
public void openWindow ( String label ) {
Widget widget = new Widget ( " $treeSearchCombo " ) ;
String search = label . indexOf ( " & " ) > 0 ? label . substring ( 0 , label . indexOf ( " & " ) ) : label ;
2013-02-05 22:01:41 +07:00
search = search . indexOf ( " ( " ) > 0 ? search . substring ( 0 , search . indexOf ( " ( " ) ) : search ;
2013-01-18 14:27:07 +07:00
WebElement element = widget . $n ( webDriver , " real " ) ;
element . sendKeys ( search ) ;
waitResponse ( ) ;
comboboxSelectItem ( " $treeSearchCombo " , label ) ;
2012-12-19 15:23:33 +07:00
}
@SimpleAction ( wiki = " |''<i>window</i>''|xpath, id or other locator|''<i>click process button</i>''|button id| " , tooltip = " Click a window's process button. " )
public void windowClickProcessButton ( String windowLocator , String btnId ) {
click ( windowLocator + " $windowToolbar $BtnProcess " ) ;
waitResponse ( ) ;
click ( " @window[instanceName= \" processButtonPopup \" ] $ " + btnId ) ;
}
@SimpleAction ( wiki = " |''<i>window</i>''|xpath, id or other locator|''<i>click toolbar</i>''|value| " , tooltip = " Click a window's toolbar button " )
public void windowClickToolbar ( String windowLocator , String toolbarButtonId ) {
click ( windowLocator + " $windowToolbar $ " + toolbarButtonId ) ;
}
@SimpleAction ( wiki = " |''<i>window</i>''|xpath, id or other locator|''<i>click detail toolbar</i>''|value| " , tooltip = " Click the detailpane's toolbar button " )
public void windowClickDetailToolbar ( String windowLocator , String toolbarButtonId ) {
click ( windowLocator + " $detailPane $ " + toolbarButtonId + " :visible " ) ;
}
@SimpleAction ( wiki = " |''<i>window message</i>''|xpath, id or other locator| " , tooltip = " Current status message display for a window " )
public String windowMessage ( String windowLocator ) {
return webDriver . findElement ( Zk . jq ( windowLocator + " $messages @label " ) ) . getText ( ) ;
}
@SimpleAction ( wiki = " |''<i>window</i>''|xpath, id or other locator|''<i>next record</i>''|value| " , tooltip = " Navigate to next record. " )
public void windowNextRecord ( String windowLocator ) {
click ( windowLocator + " $breadCrumb $Next " ) ;
}
@SimpleAction ( wiki = " |''<i>window</i>''|xpath, id or other locator|''<i>previous record</i>''|value| " , tooltip = " Navigate to previous record. " )
public void windowPreviousRecord ( String windowLocator ) {
click ( windowLocator + " $breadCrumb $Previous " ) ;
}
2012-12-13 16:22:56 +07:00
// -------- Wait Ajax Response -----
@SimpleAction ( wiki = " |''<i>wait response</i>''| " , tooltip = " Wait for ajax response with default timeout value. " )
public void waitResponse ( ) {
waitResponseWithTimeout ( 5000 ) ;
}
@SimpleAction ( wiki = " |''<i>wait response with timeout</i>''|timeout| " , tooltip = " Wait for ajax response with set timeout value. " )
public void waitResponseWithTimeout ( int timeout ) {
long s = System . currentTimeMillis ( ) ;
int i = 0 ;
int ms = 500 ;
String script = " !!zAu.processing() || !!jq.timers.length " ;
while ( i < 2 ) { // make sure the command is triggered.
while ( Boolean . valueOf ( getEval ( script ) ) ) {
if ( System . currentTimeMillis ( ) - s > timeout ) {
break ;
}
i = 0 ; //reset
sleep ( ms ) ;
}
i + + ;
sleep ( ms ) ;
}
}
2013-02-14 20:03:53 +07:00
@SimpleAction ( wiki = " |''<i>focus</i>''|xpath, id or other locator| " , tooltip = " Set focus to a zk widget " )
2013-01-11 17:11:28 +07:00
public void focus ( String locator ) {
Widget widget = new Widget ( locator ) ;
2013-02-14 20:03:53 +07:00
widget . execute ( webDriver , " focus_(100) " ) ;
2013-01-11 17:11:28 +07:00
}
2013-02-14 20:03:53 +07:00
@SimpleAction ( wiki = " |''<i>with widget</i>''|zk locator|''<i>execute</i>''|command| " , tooltip = " Execute zk widget command " )
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 ) ;
2012-12-13 16:22:56 +07:00
}
2013-03-22 14:55:04 +07:00
@SimpleAction ( wiki = " |''<i>context click</i>''|zk locator| " , tooltip = " Open context menu " )
public void contextClick ( String locator ) {
Widget widget = new Widget ( locator ) ;
WebElement element = widget . findElement ( webDriver ) ;
Actions actions = new Actions ( webDriver ) ;
actions . contextClick ( element ) . build ( ) . perform ( ) ;
}
2012-12-13 16:22:56 +07:00
/ * *
* Causes the currently executing thread to sleep for the specified number
* of milliseconds , subject to the precision and accuracy of system timers
* and schedulers . The thread does not lose ownership of any monitors .
* @param millis the length of time to sleep in milliseconds .
* /
2013-02-14 20:03:53 +07:00
@SimpleAction ( wiki = " |''<i>sleep</i>''|millisecond| " , tooltip = " sleep " )
public void sleep ( long millis ) {
2012-12-13 16:22:56 +07:00
try {
Thread . sleep ( millis ) ;
} catch ( InterruptedException e ) {
}
}
2013-02-14 20:03:53 +07:00
protected String getEval ( String script ) {
return String . valueOf ( executeJavaScript ( " return ( " + script + " ); " ) ) ;
}
2012-12-13 02:35:08 +07:00
class ZkFinder implements Finder {
@Override
public WebElement findElement ( String locator ) {
if ( locator . startsWith ( " $ " ) | | locator . startsWith ( " @ " ) ) {
return findElement ( Zk . jq ( locator ) ) ;
}
return _finder . findElement ( locator ) ;
}
@Override
public WebElement findElement ( By by ) {
return _finder . findElement ( by ) ;
}
@Override
public List < WebElement > findElements ( String locator ) {
if ( locator . startsWith ( " $ " ) | | locator . startsWith ( " @ " ) ) {
return webDriver . findElements ( Zk . jq ( locator ) ) ;
}
return _finder . findElements ( locator ) ;
}
@Override
public WebElement findOption ( String locator , String option ,
AbstractSpiderFixture abstractSpiderFixture ) {
return _finder . findOption ( locator , option , abstractSpiderFixture ) ;
}
}
}