IDEMPIERE-92 - Integrate Selenium. Refactor to 3 project, webdriver+jq, selenese and ztl. Refactor the webdriver+jq code to make it easier to write new test cases. Added logout and change role test case to the webdriver+jq project. Use GardenAdmin instead of SuperUser for example test cases.
This commit is contained in:
parent
6afdbc8a9b
commit
9d25015ddf
|
@ -2,19 +2,6 @@
|
|||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry kind="lib" path="lib/selenium-java-2.25.0.jar" sourcepath="lib/selenium-java-srcs.jar"/>
|
||||
<classpathentry kind="lib" path="lib/junit-4.8.2.jar"/>
|
||||
<classpathentry kind="lib" path="lib/selenium-firefox-driver-2.25.0.jar"/>
|
||||
<classpathentry kind="lib" path="lib/selenium-api-2.25.0.jar"/>
|
||||
<classpathentry kind="lib" path="lib/selenium-support-2.25.0.jar"/>
|
||||
<classpathentry kind="lib" path="lib/guava-12.0.1.jar"/>
|
||||
<classpathentry kind="lib" path="lib/json-20080701.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-exec-1.1.jar"/>
|
||||
<classpathentry kind="lib" path="lib/httpcore-4.1.2.jar"/>
|
||||
<classpathentry kind="lib" path="lib/httpclient-4.1.2.jar"/>
|
||||
<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
|
||||
<classpathentry kind="lib" path="lib/ztl/ztl-2.0.0-SNAPSHOT.jar" sourcepath="lib/ztl/ztl-2.0.0-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/selenium-remote-driver-2.25.0.jar"/>
|
||||
<classpathentry kind="lib" path="lib/ztl/selenium-server-standalone-2.25.0.jar"/>
|
||||
<classpathentry kind="lib" path="lib/selenium-server-standalone-2.27.0.jar" sourcepath="lib/selenium-server-2.27.0-srcs.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
|
@ -1,28 +1,10 @@
|
|||
config.properties
|
||||
- configuration file for running Ztl generator and Ztl test
|
||||
|
||||
ZtlGenerator.launch
|
||||
- Eclipse launch configuration for Ztl generator
|
||||
|
||||
zk.jq.test
|
||||
test
|
||||
- Example test cases written using Selenium Web Driver and Zk JQ selector
|
||||
|
||||
zk.selenese.test
|
||||
- Example test cases exported from Selenium IDE ( JUnit4 + WebDriver )
|
||||
|
||||
zk.ztl.test
|
||||
- Example test cases generated by Ztl generator
|
||||
|
||||
resource/selenese
|
||||
- selenese test script recorded by Selenium IDE
|
||||
|
||||
resource/ztl/zk/ztl/test
|
||||
- ztl test script
|
||||
|
||||
Notes
|
||||
======
|
||||
* Mapping between selenese ( the native format created by Selenium IDE recording ) and
|
||||
web driver export is not one to one. For e.g, the fireEvent command is not needed in
|
||||
web driver test script.
|
||||
* Use the AdempiereIDGenerator and your browser's inspect element tool to find out the selector for the element that you need to access. Alternatively,
|
||||
you can use the script created from Selenium IDE recording as a guide.
|
||||
|
||||
* For execution of test cases, you don't need AdempiereIDGenerator if you only use zk id instead of uuid(html id)
|
||||
|
||||
* You must change the "target" instance variable value to "" in the generated ztl java source
|
||||
|
|
|
@ -5,28 +5,45 @@ import java.util.List;
|
|||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.SearchContext;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebElement;
|
||||
|
||||
/**
|
||||
* utility class to find elements using zk jq selector
|
||||
* @author hengsin
|
||||
*
|
||||
*/
|
||||
public class Zk extends By {
|
||||
public class Zk {
|
||||
|
||||
private String selector;
|
||||
|
||||
private Zk(String selector) {
|
||||
this.selector = selector;
|
||||
private Zk() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WebElement> findElements(SearchContext context) {
|
||||
List<WebElement> list = (List<WebElement>) ((JavascriptExecutor)context).executeScript("return jq('" + selector + "').get();");
|
||||
return list;
|
||||
public static By jq(String selector) {
|
||||
return new ByJqSelector(selector);
|
||||
}
|
||||
|
||||
public static class ByJqSelector extends By {
|
||||
private String selector;
|
||||
|
||||
public static Zk jq(String selector) {
|
||||
return new Zk(selector);
|
||||
private ByJqSelector(String selector) {
|
||||
this.selector = selector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WebElement> findElements(SearchContext context) {
|
||||
JavascriptExecutor executor = null;
|
||||
String selector = this.selector;
|
||||
if (context instanceof WebDriver) {
|
||||
executor = (JavascriptExecutor) context;
|
||||
} else {
|
||||
RemoteWebElement element = (RemoteWebElement) context;
|
||||
String id = element.getAttribute("id");
|
||||
selector = "#"+id+" "+selector;
|
||||
executor = (JavascriptExecutor) element.getWrappedDriver();
|
||||
}
|
||||
List<WebElement> list = (List<WebElement>) executor.executeScript("return jq('" + selector + "').get();");
|
||||
return list;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,142 @@
|
|||
package test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.idempiere.ui.zk.selenium.Zk;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.NoSuchElementException;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.firefox.FirefoxDriver;
|
||||
|
||||
public class AbstractTestCase {
|
||||
|
||||
protected WebDriver driver;
|
||||
protected StringBuffer verificationErrors = new StringBuffer();
|
||||
private String baseUrl;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
driver = new FirefoxDriver();
|
||||
// driver = new ChromeDriver();
|
||||
baseUrl = "http://localhost:8080/webui/";
|
||||
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
|
||||
driver.manage().window().maximize();
|
||||
}
|
||||
|
||||
protected void type(String locator, String value) {
|
||||
WebElement element = driver.findElement(Zk.jq(locator));
|
||||
element.clear();
|
||||
element.sendKeys(value);
|
||||
}
|
||||
|
||||
protected void select(String locator, String label) {
|
||||
WebElement select = driver.findElement(Zk.jq(locator));
|
||||
select(select, label);
|
||||
}
|
||||
|
||||
protected void select(WebElement select, String label) {
|
||||
select.findElement(Zk.jq(".z-combobox-btn")).click();
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {}
|
||||
select.findElement(Zk.jq("$"+escape(label))).click();
|
||||
}
|
||||
|
||||
protected void clickCheckbox(String locator) {
|
||||
driver.findElement(Zk.jq("$"+locator+" ~ input")).click();
|
||||
}
|
||||
|
||||
protected void clickButton(String locator) {
|
||||
driver.findElement(Zk.jq(locator)).click();
|
||||
}
|
||||
|
||||
protected void login() throws Exception {
|
||||
driver.get(baseUrl);
|
||||
|
||||
Thread.sleep(500);
|
||||
|
||||
// enter user name
|
||||
type("$loginPanel $txtUserId", "GardenAdmin");
|
||||
|
||||
// enter password
|
||||
type("$loginPanel $txtPassword", "GardenAdmin");
|
||||
|
||||
//select language
|
||||
select("$loginPanel $lstLanguage", "English");
|
||||
|
||||
// check select role
|
||||
clickCheckbox("$loginPanel $chkSelectRole");
|
||||
// click ok button
|
||||
clickButton("$loginPanel $Ok");
|
||||
|
||||
selectRole("GardenWorld", "GardenWorld Admin", "HQ");
|
||||
|
||||
// wait for home page
|
||||
WebElement loginUserElement = waitForElement("$loginUserAndRole");
|
||||
|
||||
// assert login user and role
|
||||
assertEquals("GardenAdmin@GardenWorld.HQ/GardenWorld Admin", loginUserElement.getText());
|
||||
}
|
||||
|
||||
protected WebElement waitForElement(String locator) throws InterruptedException {
|
||||
By loginUserQuery = Zk.jq(locator);
|
||||
for (int second = 0;; second++) {
|
||||
if (second >= 60)
|
||||
fail("timeout");
|
||||
try {
|
||||
if (isElementPresent(loginUserQuery))
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
}
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
return driver.findElement(loginUserQuery);
|
||||
}
|
||||
|
||||
protected void selectRole(String client, String role, String org) throws InterruptedException {
|
||||
// wait for role panel
|
||||
WebElement lstClient = waitForElement("$rolePanel $lstClient");
|
||||
|
||||
// select client
|
||||
if (lstClient != null && lstClient.isDisplayed()) {
|
||||
select(lstClient, client);
|
||||
}
|
||||
|
||||
// select role
|
||||
select("$rolePanel $lstRole", role);
|
||||
|
||||
// select organization
|
||||
select("$rolePanel $lstOrganisation", org);
|
||||
|
||||
// click ok button
|
||||
clickButton("$rolePanel $Ok");
|
||||
}
|
||||
|
||||
protected boolean isElementPresent(By by) {
|
||||
try {
|
||||
driver.findElement(by);
|
||||
return true;
|
||||
} catch (NoSuchElementException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
driver.quit();
|
||||
String verificationErrorString = verificationErrors.toString();
|
||||
if (!"".equals(verificationErrorString)) {
|
||||
fail(verificationErrorString);
|
||||
}
|
||||
}
|
||||
|
||||
protected String escape(String role) {
|
||||
return role.replace(" ", "\\\\ ");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package test;
|
||||
|
||||
import org.idempiere.ui.zk.selenium.Zk;
|
||||
import org.junit.Test;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class ChangeRoleTest extends AbstractTestCase {
|
||||
|
||||
@Test
|
||||
public void testLogin() throws Exception {
|
||||
login();
|
||||
|
||||
Thread.sleep(2000);
|
||||
|
||||
driver.findElement(Zk.jq("$changeRole")).click();
|
||||
|
||||
Thread.sleep(1000);
|
||||
|
||||
// wait for home page
|
||||
selectRole("GardenWorld", "GardenWorld User", "HQ");
|
||||
|
||||
WebElement element = waitForElement("$loginUserAndRole");
|
||||
|
||||
// assert login user and role
|
||||
assertEquals("GardenAdmin@GardenWorld.HQ/GardenWorld User", element.getText());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package test;
|
||||
|
||||
import org.junit.*;
|
||||
|
||||
/**
|
||||
* Web Driver + zk jq selector, doesn't required AdempiereIdGenerator
|
||||
* @author hengsin
|
||||
*
|
||||
*/
|
||||
public class LoginTest extends AbstractTestCase {
|
||||
@Test
|
||||
public void testLogin() throws Exception {
|
||||
login();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package test;
|
||||
|
||||
import org.idempiere.ui.zk.selenium.Zk;
|
||||
import org.junit.Test;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class LogoutTest extends AbstractTestCase {
|
||||
|
||||
@Test
|
||||
public void testLogin() throws Exception {
|
||||
login();
|
||||
WebElement logout = driver.findElement(Zk.jq("$logout"));
|
||||
logout.click();
|
||||
|
||||
Thread.sleep(2000);
|
||||
WebElement loginWindow = driver.findElement(Zk.jq("$loginPanel"));
|
||||
assertTrue(loginWindow != null && loginWindow.isDisplayed());
|
||||
}
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
package zk.jq.test;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.idempiere.ui.zk.selenium.Zk;
|
||||
import org.junit.*;
|
||||
import static org.junit.Assert.*;
|
||||
import org.openqa.selenium.*;
|
||||
import org.openqa.selenium.firefox.FirefoxDriver;
|
||||
|
||||
/**
|
||||
* Web Driver + zk jq selector, doesn't required AdempiereIdGenerator
|
||||
* @author hengsin
|
||||
*
|
||||
*/
|
||||
public class LoginTest {
|
||||
private WebDriver driver;
|
||||
private String baseUrl;
|
||||
private StringBuffer verificationErrors = new StringBuffer();
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
driver = new FirefoxDriver();
|
||||
baseUrl = "http://127.0.0.1:8080/";
|
||||
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLogin() throws Exception {
|
||||
// open | /webui/ |
|
||||
driver.get(baseUrl + "/webui/");
|
||||
// enter user name
|
||||
driver.findElement(Zk.jq("$loginPanel $txtUserId")).clear();
|
||||
driver.findElement(Zk.jq("$loginPanel $txtUserId")).sendKeys("SuperUser");
|
||||
|
||||
// enter password
|
||||
driver.findElement(Zk.jq("$loginPanel $txtPassword")).clear();
|
||||
driver.findElement(Zk.jq("$loginPanel $txtPassword")).sendKeys("System");
|
||||
|
||||
// check select role
|
||||
driver.findElement(Zk.jq("$loginPanel $chkSelectRole ~ input")).click();
|
||||
// click ok button
|
||||
driver.findElement(Zk.jq("$loginPanel $Ok")).click();
|
||||
// wait for role panel
|
||||
for (int second = 0;; second++) {
|
||||
if (second >= 60) fail("timeout");
|
||||
try { if (isElementPresent(Zk.jq("$rolePanel $lstClient"))) break; } catch (Exception e) {}
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
|
||||
// select GardenWorld client
|
||||
driver.findElement(Zk.jq("$rolePanel $lstClient ~ .z-combobox-btn")).click();
|
||||
driver.findElement(Zk.jq("$rolePanel $lstClient $GardenWorld")).click();
|
||||
|
||||
// select GardenWorld admin role
|
||||
driver.findElement(Zk.jq("$rolePanel $lstRole ~ .z-combobox-btn")).click();
|
||||
//note the 4 \\\\ needed to escape the space character. ugly but it works
|
||||
driver.findElement(Zk.jq("$rolePanel $lstRole $GardenWorld\\\\ Admin")).click();
|
||||
|
||||
// select HQ organization
|
||||
driver.findElement(Zk.jq("$rolePanel $lstOrganisation ~ .z-combobox-btn")).click();
|
||||
driver.findElement(Zk.jq("$rolePanel $lstOrganisation $HQ")).click();
|
||||
|
||||
// click ok button
|
||||
driver.findElement(Zk.jq("$rolePanel $Ok")).click();
|
||||
|
||||
// wait for home page
|
||||
for (int second = 0;; second++) {
|
||||
if (second >= 60) fail("timeout");
|
||||
try { if (isElementPresent(Zk.jq("$loginUserAndRole"))) break; } catch (Exception e) {}
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
|
||||
// assert login user and role
|
||||
assertEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", driver.findElement(Zk.jq("$loginUserAndRole")).getText());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
driver.quit();
|
||||
String verificationErrorString = verificationErrors.toString();
|
||||
if (!"".equals(verificationErrorString)) {
|
||||
fail(verificationErrorString);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isElementPresent(By by) {
|
||||
try {
|
||||
driver.findElement(by);
|
||||
return true;
|
||||
} catch (NoSuchElementException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry kind="lib" path="/idempiere.zk.selenium/lib/selenium-server-standalone-2.27.0.jar" sourcepath="/idempiere.zk.selenium/lib/selenium-server-2.27.0-srcs.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>selenese</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,11 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -0,0 +1,20 @@
|
|||
test
|
||||
- Example test cases exported from Selenium IDE ( JUnit4 + WebDriver )
|
||||
|
||||
resource/selenese
|
||||
- selenese test script recorded by Selenium IDE
|
||||
|
||||
Notes
|
||||
======
|
||||
* The mapping between selenese ( the native format created from Selenium IDE recording ) and
|
||||
web driver export is not one to one. For e.g, the fireEvent command is not needed in
|
||||
web driver test script.
|
||||
|
||||
* While both "id=loginPanel_Ok" and "loginPanel_Ok" work the same when you execute selenese test with Selenium IDE,
|
||||
you must use the id= syntax for the web driver export to work.
|
||||
|
||||
* The selenese script recorded by Selenium IDE required changes ( most of the time, you need to add insert fireEvent and sleep command )
|
||||
before you can run it with Selenium IDE. However, it mostly work if you export it to the Java WebDriver format and run it from Eclipse.
|
||||
|
||||
* AdempiereIDGenerator is required for the recording and execution of selenese test cases.
|
||||
|
|
@ -18,47 +18,32 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>id=loginPanel_grdLogin_rowUser_txtUserId</td>
|
||||
<td>SuperUser</td>
|
||||
<td>id=loginPanel_txtUserId</td>
|
||||
<td>GardenAdmin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fireEvent</td>
|
||||
<td>id=loginPanel_grdLogin_rowUser_txtUserId</td>
|
||||
<td>id=loginPanel_txtUserId</td>
|
||||
<td>blur</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>id=loginPanel_grdLogin_rowPassword_txtPassword</td>
|
||||
<td>System</td>
|
||||
<td>id=loginPanel_txtPassword</td>
|
||||
<td>GardenAdmin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fireEvent</td>
|
||||
<td>id=loginPanel_grdLogin_rowPassword_txtPassword</td>
|
||||
<td>id=loginPanel_txtPassword</td>
|
||||
<td>blur</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real</td>
|
||||
<td>id=loginPanel_lstLanguage-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=loginPanel_Ok</td>
|
||||
<td>10</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>waitForElementPresent</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowclient_lstClient-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowclient_lstClient-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_grdChooseRole_rowclient_lstClient_zk_GardenWorld > td.z-comboitem-text</td>
|
||||
<td>css=#loginPanel_lstLanguage_English > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -68,12 +53,57 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn</td>
|
||||
<td>id=loginPanel_chkSelectRole-real</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text</td>
|
||||
<td>id=loginPanel_Ok</td>
|
||||
<td>10</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>waitForElementPresent</td>
|
||||
<td>id=rolePanel_lstClient-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_lstClient-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_lstClient_GardenWorld > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pause</td>
|
||||
<td>1000</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_lstRole-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_lstRole_GardenWorld_Admin > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pause</td>
|
||||
<td>1000</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_lstOrganisation-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_lstOrganisation_HQ > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -89,7 +119,7 @@
|
|||
<tr>
|
||||
<td>assertText</td>
|
||||
<td>id=loginUserAndRole</td>
|
||||
<td>SuperUser@GardenWorld.HQ/GardenWorld Admin</td>
|
||||
<td>GardenAdmin@GardenWorld.HQ/GardenWorld Admin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
|
@ -98,17 +128,32 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>waitForElementPresent</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowclient_lstClient</td>
|
||||
<td>id=rolePanel_lstClient</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowclient_lstClient-btn</td>
|
||||
<td>id=rolePanel_lstRole-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_grdChooseRole_rowclient_lstClient_System_ > td.z-comboitem-text</td>
|
||||
<td>css=#rolePanel_lstRole_GardenWorld_User > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pause</td>
|
||||
<td>1000</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_lstOrganisation-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_lstOrganisation_HQ > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -124,7 +169,7 @@
|
|||
<tr>
|
||||
<td>assertText</td>
|
||||
<td>id=loginUserAndRole</td>
|
||||
<td>SuperUser@System.*/System Administrator</td>
|
||||
<td>GardenAdmin@GardenWorld.HQ/GardenWorld User</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</body>
|
|
@ -18,27 +18,42 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>id=loginPanel_grdLogin_rowUser_txtUserId</td>
|
||||
<td>SuperUser</td>
|
||||
<td>id=loginPanel_txtUserId</td>
|
||||
<td>GardenAdmin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fireEvent</td>
|
||||
<td>id=loginPanel_grdLogin_rowUser_txtUserId</td>
|
||||
<td>id=loginPanel_txtUserId</td>
|
||||
<td>blur</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>id=loginPanel_grdLogin_rowPassword_txtPassword</td>
|
||||
<td>System</td>
|
||||
<td>id=loginPanel_txtPassword</td>
|
||||
<td>GardenAdmin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fireEvent</td>
|
||||
<td>id=loginPanel_grdLogin_rowPassword_txtPassword</td>
|
||||
<td>id=loginPanel_txtPassword</td>
|
||||
<td>blur</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real</td>
|
||||
<td>id=loginPanel_lstLanguage-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#loginPanel_lstLanguage_English > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pause</td>
|
||||
<td>1000</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=loginPanel_chkSelectRole-real</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -48,17 +63,17 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>waitForElementPresent</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowclient_lstClient-btn</td>
|
||||
<td>id=rolePanel_lstClient-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowclient_lstClient-btn</td>
|
||||
<td>id=rolePanel_lstClient-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text</td>
|
||||
<td>css=#rolePanel_lstClient_GardenWorld > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -68,12 +83,12 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowRole_lstRole-btn</td>
|
||||
<td>id=rolePanel_lstRole-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_grdChooseRole_rowRole_lstRole_GardenWorld_Admin > td.z-comboitem-text</td>
|
||||
<td>css=#rolePanel_lstRole_GardenWorld_Admin > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -83,12 +98,12 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn</td>
|
||||
<td>id=rolePanel_lstOrganisation-btn</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>click</td>
|
||||
<td>css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text</td>
|
||||
<td>css=#rolePanel_lstOrganisation_HQ > td.z-comboitem-text</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -104,7 +119,7 @@
|
|||
<tr>
|
||||
<td>assertText</td>
|
||||
<td>id=loginUserAndRole</td>
|
||||
<td>SuperUser@GardenWorld.HQ/GardenWorld Admin</td>
|
||||
<td>GardenAdmin@GardenWorld.HQ/GardenWorld Admin</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
</body>
|
|
@ -1,4 +1,4 @@
|
|||
package zk.selenese.test;
|
||||
package test;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import org.junit.*;
|
||||
|
@ -19,49 +19,52 @@ public class LoginTest {
|
|||
public void setUp() throws Exception {
|
||||
driver = new FirefoxDriver();
|
||||
baseUrl = "http://127.0.0.1:8080/";
|
||||
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
|
||||
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLogin() throws Exception {
|
||||
// open | /webui/ |
|
||||
driver.get(baseUrl + "/webui/");
|
||||
// type | id=loginPanel_grdLogin_rowUser_txtUserId | SuperUser
|
||||
driver.findElement(By.id("loginPanel_grdLogin_rowUser_txtUserId")).clear();
|
||||
driver.findElement(By.id("loginPanel_grdLogin_rowUser_txtUserId")).sendKeys("SuperUser");
|
||||
driver.get(baseUrl + "webui/");
|
||||
// type | id=loginPanel_grdLogin_rowUser_txtUserId | GardenAdmin
|
||||
driver.findElement(By.id("loginPanel_txtUserId")).clear();
|
||||
driver.findElement(By.id("loginPanel_txtUserId")).sendKeys("GardenAdmin");
|
||||
|
||||
// fireEvent | id=loginPanel_grdLogin_rowUser_txtUserId | blur
|
||||
// not needed for webdriver
|
||||
// type | id=loginPanel_grdLogin_rowPassword_txtPassword | System
|
||||
driver.findElement(By.id("loginPanel_grdLogin_rowPassword_txtPassword")).clear();
|
||||
driver.findElement(By.id("loginPanel_grdLogin_rowPassword_txtPassword")).sendKeys("System");
|
||||
// type | id=loginPanel_grdLogin_rowPassword_txtPassword | GardenAdmin
|
||||
driver.findElement(By.id("loginPanel_txtPassword")).clear();
|
||||
driver.findElement(By.id("loginPanel_txtPassword")).sendKeys("GardenAdmin");
|
||||
// fireEvent | id=loginPanel_grdLogin_rowPassword_txtPassword | blur
|
||||
// not needed for webdriver
|
||||
// click | id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real |
|
||||
driver.findElement(By.id("loginPanel_grdLogin_rowSelectRole_chkSelectRole-real")).click();
|
||||
driver.findElement(By.id("loginPanel_chkSelectRole-real")).click();
|
||||
// click | loginPanel_Ok | 10
|
||||
driver.findElement(By.id("loginPanel_Ok")).click();
|
||||
// waitForElementPresent | id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
|
||||
for (int second = 0;; second++) {
|
||||
if (second >= 60) fail("timeout");
|
||||
try { if (isElementPresent(By.id("rolePanel_grdChooseRole_rowclient_lstClient-btn"))) break; } catch (Exception e) {}
|
||||
try { if (isElementPresent(By.id("rolePanel_lstClient-btn"))) break; } catch (Exception e) {}
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
|
||||
// click | id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
|
||||
driver.findElement(By.id("rolePanel_grdChooseRole_rowclient_lstClient-btn")).click();
|
||||
// click | css=#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text |
|
||||
driver.findElement(By.cssSelector("#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text")).click();
|
||||
Thread.sleep(1000);
|
||||
WebElement lstClient = driver.findElement(By.id("rolePanel_lstClient"));
|
||||
if (lstClient != null && lstClient.isDisplayed()) {
|
||||
// click | id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
|
||||
driver.findElement(By.id("rolePanel_lstClient-btn")).click();
|
||||
// click | css=#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text |
|
||||
driver.findElement(By.cssSelector("#rolePanel_lstClient_GardenWorld > td.z-comboitem-text")).click();
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
// click | id=rolePanel_grdChooseRole_rowRole_lstRole-btn |
|
||||
driver.findElement(By.id("rolePanel_grdChooseRole_rowRole_lstRole-btn")).click();
|
||||
driver.findElement(By.id("rolePanel_lstRole-btn")).click();
|
||||
// click | css=#rolePanel_grdChooseRole_rowRole_lstRole_GardenWorld_Admin > td.z-comboitem-text |
|
||||
driver.findElement(By.cssSelector("#rolePanel_grdChooseRole_rowRole_lstRole_GardenWorld_Admin > td.z-comboitem-text")).click();
|
||||
driver.findElement(By.cssSelector("#rolePanel_lstRole_GardenWorld_Admin > td.z-comboitem-text")).click();
|
||||
Thread.sleep(1000);
|
||||
// click | id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn |
|
||||
driver.findElement(By.id("rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn")).click();
|
||||
driver.findElement(By.id("rolePanel_lstOrganisation-btn")).click();
|
||||
// click | css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text |
|
||||
driver.findElement(By.cssSelector("#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text")).click();
|
||||
driver.findElement(By.cssSelector("#rolePanel_lstOrganisation_HQ > td.z-comboitem-text")).click();
|
||||
// click | rolePanel_Ok |
|
||||
driver.findElement(By.id("rolePanel_Ok")).click();
|
||||
// waitForElementPresent | loginUserAndRole |
|
||||
|
@ -70,8 +73,8 @@ public class LoginTest {
|
|||
try { if (isElementPresent(By.id("loginUserAndRole"))) break; } catch (Exception e) {}
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
// assertText | loginUserAndRole | SuperUser@GardenWorld.HQ/GardenWorld Admin
|
||||
assertEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", driver.findElement(By.id("loginUserAndRole")).getText());
|
||||
// assertText | loginUserAndRole | GardenAdmin@GardenWorld.HQ/GardenWorld Admin
|
||||
assertEquals("GardenAdmin@GardenWorld.HQ/GardenWorld Admin", driver.findElement(By.id("loginUserAndRole")).getText());
|
||||
}
|
||||
|
||||
@After
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry kind="lib" path="/idempiere.zk.selenium/lib/selenium-server-standalone-2.27.0.jar" sourcepath="/idempiere.zk.selenium/lib/selenium-server-2.27.0-srcs.jar"/>
|
||||
<classpathentry kind="lib" path="lib/ztl-2.0.0-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>ztl</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,11 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -0,0 +1,18 @@
|
|||
config.properties
|
||||
- configuration file for running Ztl generator and Ztl test
|
||||
|
||||
ZtlGenerator.launch
|
||||
- Eclipse launch configuration for Ztl generator
|
||||
|
||||
test
|
||||
- Example test cases generated by Ztl generator
|
||||
|
||||
resource/test
|
||||
- ztl test script
|
||||
|
||||
Notes
|
||||
======
|
||||
* You must change the "target" instance variable value to "" in the generated ztl java source
|
||||
|
||||
* Use the AdempiereIDGenerator and your browser's inspect element tool to find out the selector for the element that you need to access. Alternatively,
|
||||
you can use the script created from Selenium IDE recording as a guide.
|
|
@ -1,20 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/idempiere.zk.selenium/lib/ztl/ztl-2.0.0-SNAPSHOT.jar"/>
|
||||
<listEntry value="/ztl/lib/ztl-2.0.0-SNAPSHOT.jar"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="1"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" javaProject="zk.test" path="1" type="4"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="zk.test"/> </runtimeClasspathEntry> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/zk.test/lib/ztl/commons-collections-3.2.1.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/zk.test/lib/ztl/commons-lang-2.4.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/zk.test/lib/ztl/velocity-1.7.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6" javaProject="ztl" path="1" type="4"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="ztl"/> </runtimeClasspathEntry> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/ztl/lib/commons-lang-2.4.jar" path="3" type="2"/> "/>
|
||||
<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/ztl/lib/velocity-1.7.jar" path="3" type="2"/> "/>
|
||||
</listAttribute>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.zkoss.ztl.util.ZtlGenerator"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-src resource/ztl -dist src"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="idempiere.zk.selenium"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-src resource -dist src"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="ztl"/>
|
||||
</launchConfiguration>
|
|
@ -2,7 +2,7 @@ server=http://127.0.0.1:8080
|
|||
context-path=/webui
|
||||
delay=500
|
||||
action=
|
||||
timeout=20000
|
||||
timeout=10000
|
||||
browser=firefox
|
||||
granularity=1
|
||||
leniency=1
|
|
@ -1,8 +1,5 @@
|
|||
ztl-2.0.0-SNAPSHOT.jar
|
||||
- for execution of ztl generator and ztl test cases
|
||||
|
||||
selenium-server-standalone-2.25.0.jar
|
||||
- for execution of ztl test cases
|
||||
|
||||
others
|
||||
- for execution of ztl generator
|
|
@ -2,13 +2,17 @@
|
|||
<case id="login">
|
||||
<client>
|
||||
<![CDATA[
|
||||
type(jq("$loginPanel $txtUserId"), "SuperUser");
|
||||
type(jq("$loginPanel $txtPassword"), "System");
|
||||
type(jq("$loginPanel $txtUserId"), "GardenAdmin");
|
||||
type(jq("$loginPanel $txtPassword"), "GardenAdmin");
|
||||
click(widget(jq("$loginPanel $chkSelectRole")).$n("real"));
|
||||
click(jq("$loginPanel $Ok"));
|
||||
waitResponse();
|
||||
click(jq("$rolePanel $lstClient ~ .z-combobox-btn"));
|
||||
click(jq("$rolePanel $lstClient $GardenWorld"));
|
||||
JQuery lstClient = jq("$rolePanel $lstClient");
|
||||
if (lstClient.exists() && lstClient.isVisible()) {
|
||||
click(jq("$rolePanel $lstClient ~ .z-combobox-btn"));
|
||||
click(jq("$rolePanel $lstClient $GardenWorld"));
|
||||
waitResponse();
|
||||
}
|
||||
click(jq("$rolePanel $lstRole ~ .z-combobox-btn"));
|
||||
click(jq("$rolePanel $lstRole $GardenWorld\\\\ Admin"));
|
||||
waitResponse();
|
||||
|
@ -16,7 +20,7 @@
|
|||
click(jq("$rolePanel $lstOrganisation $HQ"));
|
||||
click(jq("$rolePanel $Ok"));
|
||||
waitResponse();
|
||||
verifyEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", jq("$loginUserAndRole").text());
|
||||
verifyEquals("GardenAdmin@GardenWorld.HQ/GardenWorld Admin", jq("$loginUserAndRole").text());
|
||||
]]>
|
||||
</client>
|
||||
</case>
|
|
@ -5,14 +5,14 @@
|
|||
Description:
|
||||
|
||||
History:
|
||||
Dec, 6, 2012 17:09:52 PM
|
||||
Dec, 11, 2012 00:52:22 AM
|
||||
|
||||
Copyright (C) 2012 Potix Corporation. All Rights Reserved.
|
||||
|
||||
This program is distributed under Apache License Version 2.0 in the hope that
|
||||
it will be useful, but WITHOUT ANY WARRANTY.
|
||||
*/
|
||||
package zk.ztl.test;
|
||||
package test;
|
||||
import org.junit.Test;
|
||||
import org.zkoss.ztl.Element;
|
||||
import org.zkoss.ztl.JQuery;
|
||||
|
@ -32,7 +32,7 @@ public class LoginTest extends ZKClientTestCase {
|
|||
public LoginTest() {
|
||||
target = "";
|
||||
browsers = getBrowsers("firefox");
|
||||
_timeout = 20000;
|
||||
_timeout = 10000;
|
||||
caseID = getClass().getSimpleName();
|
||||
}
|
||||
|
||||
|
@ -53,13 +53,17 @@ public class LoginTest extends ZKClientTestCase {
|
|||
/** start **/
|
||||
/** client code **/
|
||||
|
||||
type(jq("$loginPanel $txtUserId"), "SuperUser");
|
||||
type(jq("$loginPanel $txtPassword"), "System");
|
||||
type(jq("$loginPanel $txtUserId"), "GardenAdmin");
|
||||
type(jq("$loginPanel $txtPassword"), "GardenAdmin");
|
||||
click(widget(jq("$loginPanel $chkSelectRole")).$n("real"));
|
||||
click(jq("$loginPanel $Ok"));
|
||||
waitResponse();
|
||||
JQuery lstClient = jq("$rolePanel $lstClient");
|
||||
if (lstClient.exists() && lstClient.isVisible()) {
|
||||
click(jq("$rolePanel $lstClient ~ .z-combobox-btn"));
|
||||
click(jq("$rolePanel $lstClient $GardenWorld"));
|
||||
waitResponse();
|
||||
}
|
||||
click(jq("$rolePanel $lstRole ~ .z-combobox-btn"));
|
||||
click(jq("$rolePanel $lstRole $GardenWorld\\\\ Admin"));
|
||||
waitResponse();
|
||||
|
@ -67,7 +71,7 @@ public class LoginTest extends ZKClientTestCase {
|
|||
click(jq("$rolePanel $lstOrganisation $HQ"));
|
||||
click(jq("$rolePanel $Ok"));
|
||||
waitResponse();
|
||||
verifyEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", jq("$loginUserAndRole").text());
|
||||
verifyEquals("GardenAdmin@GardenWorld.HQ/GardenWorld Admin", jq("$loginUserAndRole").text());
|
||||
|
||||
/** end **/
|
||||
} catch (SeleniumException e) {
|
Loading…
Reference in New Issue