summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2011-03-30 22:52:28 -0400
committerAdam Young <ayoung@redhat.com>2011-03-31 20:24:55 -0400
commite3a76d435e5ff312f503afb899ef6b505621d48a (patch)
treedd2892282cae96f8789c7029ec51102664751e9b
parent6948c0813dff35afadd63bc0647271f00bfc566f (diff)
downloadfreeipa-e3a76d435e5ff312f503afb899ef6b505621d48a.tar.gz
freeipa-e3a76d435e5ff312f503afb899ef6b505621d48a.tar.xz
freeipa-e3a76d435e5ff312f503afb899ef6b505621d48a.zip
Initial Selenium test cases.
http://www.freeipa.org/page/Selenium
-rwxr-xr-xinstall/ui/test/bin/selenium.sh26
-rw-r--r--install/ui/test/functional/group-add-member-user.html81
-rw-r--r--install/ui/test/functional/group-add.html51
-rw-r--r--install/ui/test/functional/group-del.html46
-rw-r--r--install/ui/test/functional/group-find.html56
-rw-r--r--install/ui/test/functional/group-mod.html86
-rw-r--r--install/ui/test/functional/group-remove-member-user.html76
-rw-r--r--install/ui/test/functional/group-suite.html21
-rw-r--r--install/ui/test/functional/hbacrule-activation.html67
-rw-r--r--install/ui/test/functional/hbacrule-add.html51
-rw-r--r--install/ui/test/functional/hbacrule-del.html46
-rw-r--r--install/ui/test/functional/hbacrule-find.html72
-rw-r--r--install/ui/test/functional/hbacrule-host.html87
-rw-r--r--install/ui/test/functional/hbacrule-mod.html87
-rw-r--r--install/ui/test/functional/hbacrule-service.html86
-rw-r--r--install/ui/test/functional/hbacrule-sourcehost.html86
-rw-r--r--install/ui/test/functional/hbacrule-suite.html30
-rw-r--r--install/ui/test/functional/hbacrule-user.html86
-rw-r--r--install/ui/test/functional/hbacsvc-add.html51
-rw-r--r--install/ui/test/functional/hbacsvc-del.html46
-rw-r--r--install/ui/test/functional/hbacsvc-find.html72
-rw-r--r--install/ui/test/functional/hbacsvc-mod.html77
-rw-r--r--install/ui/test/functional/hbacsvc-suite.html17
-rw-r--r--install/ui/test/functional/hbacsvcgroup-add-member.html67
-rw-r--r--install/ui/test/functional/hbacsvcgroup-add.html52
-rw-r--r--install/ui/test/functional/hbacsvcgroup-del.html47
-rw-r--r--install/ui/test/functional/hbacsvcgroup-find.html72
-rw-r--r--install/ui/test/functional/hbacsvcgroup-mod.html77
-rw-r--r--install/ui/test/functional/hbacsvcgroup-remove-member.html62
-rw-r--r--install/ui/test/functional/hbacsvcgroup-suite.html21
-rw-r--r--install/ui/test/functional/host-add.html51
-rw-r--r--install/ui/test/functional/host-certificate.html121
-rw-r--r--install/ui/test/functional/host-del.html46
-rw-r--r--install/ui/test/functional/host-find.html56
-rw-r--r--install/ui/test/functional/host-mod.html71
-rw-r--r--install/ui/test/functional/host-suite.html18
-rw-r--r--install/ui/test/functional/hostgroup-add-member-host.html82
-rw-r--r--install/ui/test/functional/hostgroup-add.html52
-rw-r--r--install/ui/test/functional/hostgroup-del.html46
-rw-r--r--install/ui/test/functional/hostgroup-find.html72
-rw-r--r--install/ui/test/functional/hostgroup-mod77
-rw-r--r--install/ui/test/functional/hostgroup-remove-member-host.html76
-rw-r--r--install/ui/test/functional/hostgroup-suite.html21
-rw-r--r--install/ui/test/functional/krbtpolicy-mod.html66
-rw-r--r--install/ui/test/functional/krbtpolicy-suite.html14
-rw-r--r--install/ui/test/functional/netgroup-add-member-user.html72
-rw-r--r--install/ui/test/functional/netgroup-add.html52
-rw-r--r--install/ui/test/functional/netgroup-del.html47
-rw-r--r--install/ui/test/functional/netgroup-find.html72
-rw-r--r--install/ui/test/functional/netgroup-mod.html137
-rw-r--r--install/ui/test/functional/netgroup-remove-member-user.html67
-rw-r--r--install/ui/test/functional/netgroup-suite.html21
-rw-r--r--install/ui/test/functional/permission-add.html66
-rw-r--r--install/ui/test/functional/permission-del.html46
-rw-r--r--install/ui/test/functional/permission-find.html72
-rw-r--r--install/ui/test/functional/permission-mod.html107
-rw-r--r--install/ui/test/functional/permission-suite.html17
-rw-r--r--install/ui/test/functional/privilege-add.html51
-rw-r--r--install/ui/test/functional/privilege-del.html46
-rw-r--r--install/ui/test/functional/privilege-find.html71
-rw-r--r--install/ui/test/functional/privilege-mod.html76
-rw-r--r--install/ui/test/functional/privilege-suite.html17
-rw-r--r--install/ui/test/functional/pwpolicy-add.html51
-rw-r--r--install/ui/test/functional/pwpolicy-del.html47
-rw-r--r--install/ui/test/functional/pwpolicy-mod.html86
-rw-r--r--install/ui/test/functional/pwpolicy-suite.html18
-rw-r--r--install/ui/test/functional/role-add.html51
-rw-r--r--install/ui/test/functional/role-del.html46
-rw-r--r--install/ui/test/functional/role-find.html71
-rw-r--r--install/ui/test/functional/role-mod.html77
-rw-r--r--install/ui/test/functional/role-suite.html17
-rw-r--r--install/ui/test/functional/service-add.html56
-rw-r--r--install/ui/test/functional/service-certificate.html111
-rw-r--r--install/ui/test/functional/service-del.html47
-rw-r--r--install/ui/test/functional/service-find.html57
-rw-r--r--install/ui/test/functional/service-mod.html37
-rw-r--r--install/ui/test/functional/service-suite.html20
-rw-r--r--install/ui/test/functional/sudocmd-add.html51
-rw-r--r--install/ui/test/functional/sudocmd-del.html46
-rw-r--r--install/ui/test/functional/sudocmd-find.html72
-rw-r--r--install/ui/test/functional/sudocmd-membership.html87
-rw-r--r--install/ui/test/functional/sudocmd-mod.html77
-rw-r--r--install/ui/test/functional/sudocmd-suite.html20
-rw-r--r--install/ui/test/functional/sudocmdgroup-add.html51
-rw-r--r--install/ui/test/functional/sudocmdgroup-del.html46
-rw-r--r--install/ui/test/functional/sudocmdgroup-find.html72
-rw-r--r--install/ui/test/functional/sudocmdgroup-member.html87
-rw-r--r--install/ui/test/functional/sudocmdgroup-mod.html77
-rw-r--r--install/ui/test/functional/sudocmdgroup-suite.html20
-rw-r--r--install/ui/test/functional/sudorule-activation.html67
-rw-r--r--install/ui/test/functional/sudorule-add.html52
-rw-r--r--install/ui/test/functional/sudorule-allow-command.html87
-rw-r--r--install/ui/test/functional/sudorule-del.html56
-rw-r--r--install/ui/test/functional/sudorule-find.html77
-rw-r--r--install/ui/test/functional/sudorule-host.html86
-rw-r--r--install/ui/test/functional/sudorule-mod.html77
-rw-r--r--install/ui/test/functional/sudorule-runasuser.html86
-rw-r--r--install/ui/test/functional/sudorule-suite.html28
-rw-r--r--install/ui/test/functional/sudorule-user.html86
-rw-r--r--install/ui/test/functional/user-activation.html81
-rw-r--r--install/ui/test/functional/user-add.html56
-rw-r--r--install/ui/test/functional/user-del.html46
-rw-r--r--install/ui/test/functional/user-find.html56
-rw-r--r--install/ui/test/functional/user-mod.html82
-rw-r--r--install/ui/test/functional/user-password-reset.html76
-rw-r--r--install/ui/test/functional/user-suite.html19
106 files changed, 6324 insertions, 0 deletions
diff --git a/install/ui/test/bin/selenium.sh b/install/ui/test/bin/selenium.sh
new file mode 100755
index 000000000..034b1df6f
--- /dev/null
+++ b/install/ui/test/bin/selenium.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+
+TEST_SUITE=$1
+TEST_RESULTS=$2
+
+if [ "$TEST_SUITE" = "" -o "$TEST_RESULTS" = "" ]
+then
+ echo "Usage: $0 <test suite> <test results>"
+ exit 1
+fi
+
+if [ ! -f $TEST_SUITE ]
+then
+ echo "Error: Test suite $TEST_SUITE not found."
+ exit 1
+fi
+
+PROFILE_DIR=$HOME/.mozilla/firefox
+PROFILE=`ls $PROFILE_DIR | grep .default`
+PROFILE_TEMPLATE=$PROFILE_DIR/$PROFILE
+
+java -jar /usr/share/java/selenium-server-standalone.jar -firefoxProfileTemplate $PROFILE_TEMPLATE -htmlSuite "*firefox" "http://localhost" $TEST_SUITE $TEST_RESULTS
+
+# Kill Firefox
+ps -ef|grep -i firefox|grep '\-profile'|awk '{print $2;}'|xargs kill -9
diff --git a/install/ui/test/functional/group-add-member-user.html b/install/ui/test/functional/group-add-member-user.html
new file mode 100644
index 000000000..b0b18f350
--- /dev/null
+++ b/install/ui/test/functional/group-add-member-user.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Member User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Member User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div[1]/ul/li[4]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Enroll</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[1]/table/tbody/tr[2]/td[1]/input</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[1]/table/tbody/tr[2]/td[1]/input</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='group']/span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/group-add.html b/install/ui/test/functional/group-add.html
new file mode 100644
index 000000000..6d59588df
--- /dev/null
+++ b/install/ui/test/functional/group-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>3 groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div/ul/li[1]/span/span/a[2]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='group']/span[@name='search']//input[@value='testgroup']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/group-del.html b/install/ui/test/functional/group-del.html
new file mode 100644
index 000000000..a05f52cfe
--- /dev/null
+++ b/install/ui/test/functional/group-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='select' and @value='testgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div/ul/li[1]/span/span/a[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>3 groups matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/group-find.html b/install/ui/test/functional/group-find.html
new file mode 100644
index 000000000..ebc5624d5
--- /dev/null
+++ b/install/ui/test/functional/group-find.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>View Users</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">View Users</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-group-filter</td>
+ <td>testgroup</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 group matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-group-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/group-mod.html b/install/ui/test/functional/group-mod.html
new file mode 100644
index 000000000..bc8104080
--- /dev/null
+++ b/install/ui/test/functional/group-mod.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Group 123</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/group-remove-member-user.html b/install/ui/test/functional/group-remove-member-user.html
new file mode 100644
index 000000000..9b37afcbe
--- /dev/null
+++ b/install/ui/test/functional/group-remove-member-user.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Member User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Member User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div[1]/ul/li[@title='member_user']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='group']/span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div[1]/ul/li[4]/ul/li[2]/span/a[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='group']/span/table/tbody/tr</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='group']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 groups matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/group-suite.html b/install/ui/test/functional/group-suite.html
new file mode 100644
index 000000000..493d90911
--- /dev/null
+++ b/install/ui/test/functional/group-suite.html
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="group-add.html">Add Group</a></td></tr>
+<tr><td><a href="group-find.html">Search Group</a></td></tr>
+<tr><td><a href="group-mod.html">Edit Group</a></td></tr>
+<tr><td><a href="user-add.html">Add User</a></td></tr>
+<tr><td><a href="group-add-member-user.html">Add Member User</a></td></tr>
+<tr><td><a href="group-remove-member-user.html">Delete Member User</a></td></tr>
+<tr><td><a href="user-del.html">Delete User</a></td></tr>
+<tr><td><a href="group-del.html">Delete Group</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-activation.html b/install/ui/test/functional/hbacrule-activation.html
new file mode 100644
index 000000000..b5397eb02
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-activation.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>HBAC Rule Activation</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HBAC Rule Activation</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacrule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacrule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='ipaenabledflag' and @value='FALSE']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>ipaenabledflag</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-add.html b/install/ui/test/functional/hbacrule-add.html
new file mode 100644
index 000000000..2dd46b665
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add HBAC Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add HBAC Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 HBAC rule matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testhbacrule</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>accessruletype</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-del.html b/install/ui/test/functional/hbacrule-del.html
new file mode 100644
index 000000000..ca6d0b8e7
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete HBAC Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete HBAC Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-find.html b/install/ui/test/functional/hbacrule-find.html
new file mode 100644
index 000000000..9fcec8a61
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search HBAC Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search HBAC Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacrule-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacrule-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacrule-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-host.html b/install/ui/test/functional/hbacrule-host.html
new file mode 100644
index 000000000..bcaff8728
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-host.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>HBAC Rule Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HBAC Rule Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacrule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacrule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='hostcategory']//span[@name='memberhost_host']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='hostcategory']//span[@name='memberhost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='hostcategory']//span[@name='memberhost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='hostcategory']//span[@name='memberhost_host']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='hostcategory']//span[@name='memberhost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-mod.html b/install/ui/test/functional/hbacrule-mod.html
new file mode 100644
index 000000000..18c2be91c
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-mod.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit HBAC Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit HBAC Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacrule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacrule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test HBAC Rule</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='accessruletype' and @value='deny']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>accessruletype</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-service.html b/install/ui/test/functional/hbacrule-service.html
new file mode 100644
index 000000000..980904865
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-service.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>HBAC Rule Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HBAC Rule Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacrule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacrule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='servicecategory']//span[@name='memberservice_hbacsvc']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='servicecategory']//span[@name='memberservice_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='servicecategory']//span[@name='memberservice_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='servicecategory']//span[@name='memberservice_hbacsvc']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='servicecategory']//span[@name='memberservice_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-sourcehost.html b/install/ui/test/functional/hbacrule-sourcehost.html
new file mode 100644
index 000000000..ae998b803
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-sourcehost.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>HBAC Rule Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HBAC Rule Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacrule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacrule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='sourcehostcategory']//span[@name='sourcehost_host']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='sourcehostcategory']//span[@name='sourcehost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='sourcehostcategory']//span[@name='sourcehost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='sourcehostcategory']//span[@name='sourcehost_host']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='sourcehostcategory']//span[@name='sourcehost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-suite.html b/install/ui/test/functional/hbacrule-suite.html
new file mode 100644
index 000000000..d52cecebc
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-suite.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="hbacrule-add.html">Add HBAC Rule</a></td></tr>
+<tr><td><a href="hbacrule-find.html">Search HBAC Rule</a></td></tr>
+<tr><td><a href="hbacrule-mod.html">Edit HBAC Rule</a></td></tr>
+<tr><td><a href="hbacrule-activation.html">HBAC Rule Activation</a></td></tr>
+<tr><td><a href="user-add.html">Add User</a></td></tr>
+<tr><td><a href="hbacrule-user.html">HBAC Rule User</a></td></tr>
+<tr><td><a href="user-del.html">Delete User</a></td></tr>
+<tr><td><a href="host-add.html">Add Host</a></td></tr>
+<tr><td><a href="hbacrule-host.html">HBAC Rule Host</a></td></tr>
+<tr><td><a href="host-del.html">Delete Host</a></td></tr>
+<tr><td><a href="hbacsvc-add.html">Add HBAC Service</a></td></tr>
+<tr><td><a href="hbacrule-service.html">HBAC Rule Service</a></td></tr>
+<tr><td><a href="hbacsvc-del.html">Delete HBAC Service</a></td></tr>
+<tr><td><a href="host-add.html">Add Source Host</a></td></tr>
+<tr><td><a href="hbacrule-sourcehost.html">HBAC Rule Source Host</a></td></tr>
+<tr><td><a href="host-del.html">Delete Source Host</a></td></tr>
+<tr><td><a href="hbacrule-del.html">Delete HBAC Rule</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacrule-user.html b/install/ui/test/functional/hbacrule-user.html
new file mode 100644
index 000000000..35d0a52e6
--- /dev/null
+++ b/install/ui/test/functional/hbacrule-user.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>HBAC Rule User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">HBAC Rule User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacrule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacrule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacrule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Add</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='usercategory']//span[@name='memberuser_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='usercategory']//span[@name='memberuser_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='usercategory']//span[@name='memberuser_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvc-add.html b/install/ui/test/functional/hbacsvc-add.html
new file mode 100644
index 000000000..b9a1d890b
--- /dev/null
+++ b/install/ui/test/functional/hbacsvc-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add HBAC Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add HBAC Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvc</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>10 HBAC services matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testhbacsvc</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test HBAC Service</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvc-del.html b/install/ui/test/functional/hbacsvc-del.html
new file mode 100644
index 000000000..030aa9723
--- /dev/null
+++ b/install/ui/test/functional/hbacsvc-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete HBAC Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete HBAC Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvc</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvc-find.html b/install/ui/test/functional/hbacsvc-find.html
new file mode 100644
index 000000000..77ae0ab5c
--- /dev/null
+++ b/install/ui/test/functional/hbacsvc-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search HBAC Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search HBAC Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvc</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacsvc-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacsvc-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacsvc-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvc-mod.html b/install/ui/test/functional/hbacsvc-mod.html
new file mode 100644
index 000000000..0de96ca22
--- /dev/null
+++ b/install/ui/test/functional/hbacsvc-mod.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit HBAC Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit HBAC Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvc</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacsvc</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacsvc:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test HBAC Service</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvc-suite.html b/install/ui/test/functional/hbacsvc-suite.html
new file mode 100644
index 000000000..381ed6327
--- /dev/null
+++ b/install/ui/test/functional/hbacsvc-suite.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="hbacsvc-add.html">Add HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvc-find.html">Search HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvc-mod.html">Edit HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvc-del.html">Delete HBAC Service</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-add-member.html b/install/ui/test/functional/hbacsvcgroup-add-member.html
new file mode 100644
index 000000000..9574d396b
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-add-member.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Member HBAC Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Member HBAC Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacsvcgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Add</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='member_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-add.html b/install/ui/test/functional/hbacsvcgroup-add.html
new file mode 100644
index 000000000..71c84df66
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-add.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add HBAC Service Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add HBAC Service Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 HBAC service group matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testhbacsvcgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test HBAC Service Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-del.html b/install/ui/test/functional/hbacsvcgroup-del.html
new file mode 100644
index 000000000..3027ca399
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-del.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete HBAC Service Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete HBAC Service Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-find.html b/install/ui/test/functional/hbacsvcgroup-find.html
new file mode 100644
index 000000000..2203d1425
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search HBAC Service Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search HBAC Service Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacsvcgroup-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacsvcgroup-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hbacsvcgroup-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-mod.html b/install/ui/test/functional/hbacsvcgroup-mod.html
new file mode 100644
index 000000000..68561404f
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-mod.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit HBAC Service Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit HBAC Service Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacsvcgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test HBAC Service Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-remove-member.html b/install/ui/test/functional/hbacsvcgroup-remove-member.html
new file mode 100644
index 000000000..4fc731237
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-remove-member.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Member HBAC Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Member HBAC Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=1&amp;hbacrule-entity=hbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='search']//input[@value='testhbacsvcgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhbacsvcgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhbacsvcgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='member_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hbacrule']//span[@name='member_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hbacrule']//span[@name='member_hbacsvc']//input[@value='testhbacsvc']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hbacsvcgroup-suite.html b/install/ui/test/functional/hbacsvcgroup-suite.html
new file mode 100644
index 000000000..2b9763965
--- /dev/null
+++ b/install/ui/test/functional/hbacsvcgroup-suite.html
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="hbacsvcgroup-add.html">Add HBAC Service Group</a></td></tr>
+<tr><td><a href="hbacsvcgroup-find.html">Search HBAC Service Group</a></td></tr>
+<tr><td><a href="hbacsvcgroup-mod.html">Edit HBAC Service Group</a></td></tr>
+<tr><td><a href="hbacsvc-add.html">Add HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvcgroup-add-member.html">Add Member HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvcgroup-remove-member.html">Delete Member HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvc-del.html">Delete HBAC Service</a></td></tr>
+<tr><td><a href="hbacsvcgroup-del.html">Delete HBAC Service Group</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/host-add.html b/install/ui/test/functional/host-add.html
new file mode 100644
index 000000000..9ea659b18
--- /dev/null
+++ b/install/ui/test/functional/host-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 host matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='host']/div/ul/li[1]/span/span/a[2]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>fqdn</td>
+ <td>test.example.com</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>force</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='host']/span[@name='search']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/host-certificate.html b/install/ui/test/functional/host-certificate.html
new file mode 100644
index 000000000..3931204ec
--- /dev/null
+++ b/install/ui/test/functional/host-certificate.html
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Host Certificate</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Host Certificate</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 hosts matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=test.example.com</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVisible</td>
+ <td>//div[@id='host']//span[@name='certificate_status']//div[@name='certificate-missing']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//dl[@id='certificate']/dd/span/div[3]/div/a</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>//textarea</td>
+ <td>MIIBezCB5QIBADA8MR8wHQYDVQQKDBZJRE0uTEFCLkJPUy5SRURIQVQuQ09NMRkw<br />FwYDVQQDDBB0ZXN0LmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB<br />iQKBgQDYOFeE6Y16kQ1gSvlnUU/LOaQlbsYnkfOCZ9UOaeg1RbKXFIJYB0s1DAa8<br />biI8gb6ZpzDjcAtNZHchOBtXnl0BBPOhkF6nD444SImz6eUBCmcCNeF4lgmNTxUS<br />W2AkWl4vgXGwWSlxSrBIcylIqsIMMdYg71mUeTyuJLit8bGQdwIDAQABoAAwDQYJ<br />KoZIhvcNAQEFBQADgYEAKb3/9gkJuOf3wRGe2n+FAfqBzStq8r5SLyVa5JyOxBhJ<br />nKGrTcv95X+2ch8RPqvOg8lgn12Js/Rm3ipb0MlCkBYeq8b0RQv4N0sG2dqJG8a1<br />yxhxxIjovisey6F09cOyZljAhpJ6Qeqd7GHr7HFCPTDWrYDIb8QpiRrgNFvBtIQ=</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVisible</td>
+ <td>//div[@id='host']//span[@name='certificate_status']//div[@name='certificate-valid']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='host']//span[@name='certificate_status']//div[@name='certificate-valid']//a[@title='Get']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td>1000</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=View</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='host']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='host']//span[@name='search']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/host-del.html b/install/ui/test/functional/host-del.html
new file mode 100644
index 000000000..38554bac6
--- /dev/null
+++ b/install/ui/test/functional/host-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 hosts matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='select' and @value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='host']/div/ul/li[1]/span/span/a[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 host matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/host-find.html b/install/ui/test/functional/host-find.html
new file mode 100644
index 000000000..cb9235d79
--- /dev/null
+++ b/install/ui/test/functional/host-find.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>View Hosts</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">View Hosts</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 hosts matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-host-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 host matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-host-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 hosts matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/host-mod.html b/install/ui/test/functional/host-mod.html
new file mode 100644
index 000000000..773a9e826
--- /dev/null
+++ b/install/ui/test/functional/host-mod.html
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 hosts matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=test.example.com</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='host']//span[@name='fqdn'][label='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Host</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='host']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='host']//span[@name='search']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyText</td>
+ <td>css=#host table.search-table tbody tr:nth-child(2) span[name=description]</td>
+ <td>Test Host</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/host-suite.html b/install/ui/test/functional/host-suite.html
new file mode 100644
index 000000000..c58a751cf
--- /dev/null
+++ b/install/ui/test/functional/host-suite.html
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="host-add.html">Add Host</a></td></tr>
+<tr><td><a href="host-find.html">Search Host</a></td></tr>
+<tr><td><a href="host-mod.html">Edit Host</a></td></tr>
+<tr><td><a href="host-certificate.html">Host Certificate</a></td></tr>
+<tr><td><a href="host-del.html">Delete Host</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-add-member-host.html b/install/ui/test/functional/hostgroup-add-member-host.html
new file mode 100644
index 000000000..1030d6a53
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-add-member-host.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Member Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Member Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhostgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhostgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div[1]/ul/li[6]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Enroll</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[1]//input[@name='select' and @value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[1]//input[@name='select' and @value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hostgroup']/span[@name='association']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-add.html b/install/ui/test/functional/hostgroup-add.html
new file mode 100644
index 000000000..116c47254
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-add.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Host Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Host Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 hostgroups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div/ul/li[1]/span/span/a[2]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testhostgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Host Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-del.html b/install/ui/test/functional/hostgroup-del.html
new file mode 100644
index 000000000..e062f6479
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Host Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Host Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='select' and @value='testhostgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div/ul/li[1]/span/span/a[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 hostgroups matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-find.html b/install/ui/test/functional/hostgroup-find.html
new file mode 100644
index 000000000..08476f5ca
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Host Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Host Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hostgroup-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hostgroup-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 hostgroups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-hostgroup-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-mod b/install/ui/test/functional/hostgroup-mod
new file mode 100644
index 000000000..a14029f93
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-mod
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Host Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Host Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhostgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhostgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Host Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-remove-member-host.html b/install/ui/test/functional/hostgroup-remove-member-host.html
new file mode 100644
index 000000000..7fd1ad582
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-remove-member-host.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Member Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Member Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testhostgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testhostgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div[1]/ul/li[6]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='hostgroup']/span[@name='association']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/span[@name='association']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div[1]/ul/li[6]/ul/li[2]/span/a[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='hostgroup']/span[@name='association']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='hostgroup']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 hostgroup matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/hostgroup-suite.html b/install/ui/test/functional/hostgroup-suite.html
new file mode 100644
index 000000000..0f681c1c5
--- /dev/null
+++ b/install/ui/test/functional/hostgroup-suite.html
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="hostgroup-add.html">Add Host Group</a></td></tr>
+<tr><td><a href="hostgroup-find.html">Search Host Group</a></td></tr>
+<tr><td><a href="hostgroup-mod">Edit Host Group</a></td></tr>
+<tr><td><a href="host-add.html">Add Host</a></td></tr>
+<tr><td><a href="hostgroup-add-member-host.html">Add Member Host</a></td></tr>
+<tr><td><a href="hostgroup-remove-member-host.html">Delete Member Host</a></td></tr>
+<tr><td><a href="host-del.html">Delete Host</a></td></tr>
+<tr><td><a href="hostgroup-del.html">Delete Host Group</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/krbtpolicy-mod.html b/install/ui/test/functional/krbtpolicy-mod.html
new file mode 100644
index 000000000..e10406701
--- /dev/null
+++ b/install/ui/test/functional/krbtpolicy-mod.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Kerberos Ticket Policy</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Kerberos Ticket Policy</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;identity=1&amp;policy=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbmaxrenewableage</td>
+ <td>100</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbmaxticketlife</td>
+ <td>100</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbmaxrenewableage</td>
+ <td>604800</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbmaxticketlife</td>
+ <td>86400</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/krbtpolicy-suite.html b/install/ui/test/functional/krbtpolicy-suite.html
new file mode 100644
index 000000000..9eccf04f2
--- /dev/null
+++ b/install/ui/test/functional/krbtpolicy-suite.html
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="krbtpolicy-mod.html">Edit Kerberos Ticket Policy</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-add-member-user.html b/install/ui/test/functional/netgroup-add-member-user.html
new file mode 100644
index 000000000..e985f2b13
--- /dev/null
+++ b/install/ui/test/functional/netgroup-add-member-user.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Member User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Member User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testnetgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testnetgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']/div[1]/ul/li[9]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Enroll</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//input[@name='select' and @value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='select' and @value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='netgroup']/span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-add.html b/install/ui/test/functional/netgroup-add.html
new file mode 100644
index 000000000..d4935ce58
--- /dev/null
+++ b/install/ui/test/functional/netgroup-add.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Netgroup</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Netgroup</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 netgroups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']/div/ul/li[1]/span/span/a[2]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testnetgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Netgroup</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-del.html b/install/ui/test/functional/netgroup-del.html
new file mode 100644
index 000000000..226c0c1fe
--- /dev/null
+++ b/install/ui/test/functional/netgroup-del.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Netgroup</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Netgroup</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='select' and @value='testnetgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']/div/ul/li[1]/span/span/a[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 netgroups matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-find.html b/install/ui/test/functional/netgroup-find.html
new file mode 100644
index 000000000..ac2a0f061
--- /dev/null
+++ b/install/ui/test/functional/netgroup-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Netgroup</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Netgroup</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-netgroup-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-netgroup-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 netgroups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-netgroup-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-mod.html b/install/ui/test/functional/netgroup-mod.html
new file mode 100644
index 000000000..03407d0ba
--- /dev/null
+++ b/install/ui/test/functional/netgroup-mod.html
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Netgroup</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Netgroup</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testnetgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testnetgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>nisdomainname</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>nisdomainname</td>
+ <td>example.com</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='netgroup']//span[@name='search']//input[@value='testnetgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='netgroup']//span[@name='search']//input[@value='testnetgroup']/ancestor::tr//span[@name='description' and text()='xxx']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testnetgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testnetgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Netgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>nisdomainname</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>nisdomainname</td>
+ <td>idm.lab.bos.redhat.com</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='netgroup']//span[@name='search']//input[@value='testnetgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='netgroup']//span[@name='search']//input[@value='testnetgroup']/ancestor::tr//span[@name='description' and text()='Test Netgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-remove-member-user.html b/install/ui/test/functional/netgroup-remove-member-user.html
new file mode 100644
index 000000000..beb3939cd
--- /dev/null
+++ b/install/ui/test/functional/netgroup-remove-member-user.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Member User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Member User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=4</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 netgroup matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testnetgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testnetgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']/div[1]/ul/li[9]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='netgroup']//span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='netgroup']//span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='netgroup']//span[@name='association']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/netgroup-suite.html b/install/ui/test/functional/netgroup-suite.html
new file mode 100644
index 000000000..5fe3fc107
--- /dev/null
+++ b/install/ui/test/functional/netgroup-suite.html
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="netgroup-add.html">Add Netgroup</a></td></tr>
+<tr><td><a href="netgroup-find.html">Search Netgroup</a></td></tr>
+<tr><td><a href="netgroup-mod.html">Edit Netgroup</a></td></tr>
+<tr><td><a href="user-add.html">Add User</a></td></tr>
+<tr><td><a href="netgroup-add-member-user.html">Add Member User</a></td></tr>
+<tr><td><a href="netgroup-remove-member-user.html">Delete Member User</a></td></tr>
+<tr><td><a href="user-del.html">Delete User</a></td></tr>
+<tr><td><a href="netgroup-del.html">Delete Netgroup</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/permission-add.html b/install/ui/test/functional/permission-add.html
new file mode 100644
index 000000000..d8b4afb1f
--- /dev/null
+++ b/install/ui/test/functional/permission-add.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=permission</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testpermission</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//span[@name='permissions']//input[@value='write']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>select</td>
+ <td>//div[@name='target']//select</td>
+ <td>label=type</td>
+</tr>
+<tr>
+ <td>select</td>
+ <td>//span[@name='type']//select[@name='type']</td>
+ <td>label=user</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//dd[@name='attrs']//input[@value='description']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/permission-del.html b/install/ui/test/functional/permission-del.html
new file mode 100644
index 000000000..77f7b4df1
--- /dev/null
+++ b/install/ui/test/functional/permission-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=permission</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/permission-find.html b/install/ui/test/functional/permission-find.html
new file mode 100644
index 000000000..1b250838c
--- /dev/null
+++ b/install/ui/test/functional/permission-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=permission</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-permission-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-permission-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-permission-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testpermission']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/permission-mod.html b/install/ui/test/functional/permission-mod.html
new file mode 100644
index 000000000..ae8489b2c
--- /dev/null
+++ b/install/ui/test/functional/permission-mod.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=permission</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testpermission</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//span[@name='permissions']//input[@value='add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//span[@name='permissions']//input[@value='delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//span[@name='permissions']//input[@value='write']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//dd[@name='attrs']//input[@value='cn']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//dd[@name='attrs']//input[@value='description']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//span[@name='permissions']//input[@value='write']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//span[@name='permissions']//input[@value='add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//span[@name='permissions']//input[@value='delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//dd[@name='attrs']//input[@value='cn']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']//dd[@name='attrs']//input[@value='description']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/permission-suite.html b/install/ui/test/functional/permission-suite.html
new file mode 100644
index 000000000..6f50bb7a5
--- /dev/null
+++ b/install/ui/test/functional/permission-suite.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="permission-add.html">Add Permission</a></td></tr>
+<tr><td><a href="permission-find.html">Search Permission</a></td></tr>
+<tr><td><a href="permission-mod.html">Edit Permission</a></td></tr>
+<tr><td><a href="permission-del.html">Delete Permission</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/privilege-add.html b/install/ui/test/functional/privilege-add.html
new file mode 100644
index 000000000..2cc276940
--- /dev/null
+++ b/install/ui/test/functional/privilege-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=privilege</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testprivilege</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Privilege</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/privilege-del.html b/install/ui/test/functional/privilege-del.html
new file mode 100644
index 000000000..d206eb4bc
--- /dev/null
+++ b/install/ui/test/functional/privilege-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=privilege</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/privilege-find.html b/install/ui/test/functional/privilege-find.html
new file mode 100644
index 000000000..f7bda6bdf
--- /dev/null
+++ b/install/ui/test/functional/privilege-find.html
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=privilege</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-privilege-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-privilege-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-privilege-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testprivilege']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/privilege-mod.html b/install/ui/test/functional/privilege-mod.html
new file mode 100644
index 000000000..92a33d820
--- /dev/null
+++ b/install/ui/test/functional/privilege-mod.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Privilege</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Privilege</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=privilege</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testprivilege</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Privilege</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/privilege-suite.html b/install/ui/test/functional/privilege-suite.html
new file mode 100644
index 000000000..ff165696f
--- /dev/null
+++ b/install/ui/test/functional/privilege-suite.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="privilege-add.html">Add Privilege</a></td></tr>
+<tr><td><a href="privilege-find.html">Search Privilege</a></td></tr>
+<tr><td><a href="privilege-mod.html">Edit Privilege</a></td></tr>
+<tr><td><a href="privilege-del.html">Delete Privilege</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/pwpolicy-add.html b/install/ui/test/functional/pwpolicy-add.html
new file mode 100644
index 000000000..c53df39ed
--- /dev/null
+++ b/install/ui/test/functional/pwpolicy-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Password Policy</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Password Policy</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='pwpolicy']//div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cospriority</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='pwpolicy']//span[@name='search']//input[@value='testgroup']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/pwpolicy-del.html b/install/ui/test/functional/pwpolicy-del.html
new file mode 100644
index 000000000..d9dd0fa75
--- /dev/null
+++ b/install/ui/test/functional/pwpolicy-del.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Password Policy</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Password Policy</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='pwpolicy']//span[@name='search']//input[@value='testgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='pwpolicy']//span[@name='search']//input[@value='testgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='pwpolicy']//div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='pwpolicy']//span[@name='search']//input[@value='testgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/pwpolicy-mod.html b/install/ui/test/functional/pwpolicy-mod.html
new file mode 100644
index 000000000..5e85a38d2
--- /dev/null
+++ b/install/ui/test/functional/pwpolicy-mod.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Password Policy</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Password Policy</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=3</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='pwpolicy']//span[@name='search']//input[@value='testgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbmaxpwdlife</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>krbmaxpwdlife</td>
+ <td>30</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbminpwdlife</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>krbminpwdlife</td>
+ <td>1</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbpwdhistorylength</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>krbpwdhistorylength</td>
+ <td>10</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>krbpwdminlength</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>krbpwdminlength</td>
+ <td>5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/pwpolicy-suite.html b/install/ui/test/functional/pwpolicy-suite.html
new file mode 100644
index 000000000..2ce33acec
--- /dev/null
+++ b/install/ui/test/functional/pwpolicy-suite.html
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="group-add.html">Add Group</a></td></tr>
+<tr><td><a href="pwpolicy-add.html">Add Password Policy</a></td></tr>
+<tr><td><a href="pwpolicy-mod.html">Edit Password Policy</a></td></tr>
+<tr><td><a href="pwpolicy-del.html">Delete Password Policy</a></td></tr>
+<tr><td><a href="group-del.html">Delete Group</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/role-add.html b/install/ui/test/functional/role-add.html
new file mode 100644
index 000000000..9d6bc56aa
--- /dev/null
+++ b/install/ui/test/functional/role-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=role</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testrole</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Role</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/role-del.html b/install/ui/test/functional/role-del.html
new file mode 100644
index 000000000..0f7dcedc1
--- /dev/null
+++ b/install/ui/test/functional/role-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=role</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='role']/div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/role-find.html b/install/ui/test/functional/role-find.html
new file mode 100644
index 000000000..f8c21b4f3
--- /dev/null
+++ b/install/ui/test/functional/role-find.html
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Permission</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Permission</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=role</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-role-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-role-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-role-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='role']/span[@name='search']//input[@value='testrole']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/role-mod.html b/install/ui/test/functional/role-mod.html
new file mode 100644
index 000000000..aa499fda3
--- /dev/null
+++ b/install/ui/test/functional/role-mod.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Role</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Role</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=2&amp;role-entity=role</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testrole</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Role</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/role-suite.html b/install/ui/test/functional/role-suite.html
new file mode 100644
index 000000000..9b387bb9d
--- /dev/null
+++ b/install/ui/test/functional/role-suite.html
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="role-add.html">Add Role</a></td></tr>
+<tr><td><a href="role-find.html">Search Role</a></td></tr>
+<tr><td><a href="role-mod.html">Edit Role</a></td></tr>
+<tr><td><a href="role-del.html">Delete Role</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/service-add.html b/install/ui/test/functional/service-add.html
new file mode 100644
index 000000000..65bf199bb
--- /dev/null
+++ b/install/ui/test/functional/service-add.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=5</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>4 services matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='service']/div/ul/li[1]/span/span/a[2]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>//input[@name='service']</td>
+ <td>testservice</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>//input[@name='host']</td>
+ <td>test.example.com</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>force</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/service-certificate.html b/install/ui/test/functional/service-certificate.html
new file mode 100644
index 000000000..64e18bf1f
--- /dev/null
+++ b/install/ui/test/functional/service-certificate.html
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Host Certificate</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Host Certificate</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=5</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVisible</td>
+ <td>//div[@id='service']//span[@name='certificate_status']//div[@name='certificate-missing']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//dl[@id='certificate']/dd/span/div[3]/div/a</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>//textarea</td>
+ <td>MIIBezCB5QIBADA8MR8wHQYDVQQKDBZJRE0uTEFCLkJPUy5SRURIQVQuQ09NMRkw<br />FwYDVQQDDBB0ZXN0LmV4YW1wbGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB<br />iQKBgQDYOFeE6Y16kQ1gSvlnUU/LOaQlbsYnkfOCZ9UOaeg1RbKXFIJYB0s1DAa8<br />biI8gb6ZpzDjcAtNZHchOBtXnl0BBPOhkF6nD444SImz6eUBCmcCNeF4lgmNTxUS<br />W2AkWl4vgXGwWSlxSrBIcylIqsIMMdYg71mUeTyuJLit8bGQdwIDAQABoAAwDQYJ<br />KoZIhvcNAQEFBQADgYEAKb3/9gkJuOf3wRGe2n+FAfqBzStq8r5SLyVa5JyOxBhJ<br />nKGrTcv95X+2ch8RPqvOg8lgn12Js/Rm3ipb0MlCkBYeq8b0RQv4N0sG2dqJG8a1<br />yxhxxIjovisey6F09cOyZljAhpJ6Qeqd7GHr7HFCPTDWrYDIb8QpiRrgNFvBtIQ=</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForVisible</td>
+ <td>//div[@id='service']//span[@name='certificate_status']//div[@name='certificate-valid']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='service']//span[@name='certificate_status']//div[@name='certificate-valid']//a[@title='Get']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>pause</td>
+ <td>1000</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=View</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>css=div.ui-dialog</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/service-del.html b/install/ui/test/functional/service-del.html
new file mode 100644
index 000000000..da68b89b9
--- /dev/null
+++ b/install/ui/test/functional/service-del.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=5</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice//test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/service-find.html b/install/ui/test/functional/service-find.html
new file mode 100644
index 000000000..f704b5d9e
--- /dev/null
+++ b/install/ui/test/functional/service-find.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=5</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-service-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 service matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-service-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>5 services matched</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/service-mod.html b/install/ui/test/functional/service-mod.html
new file mode 100644
index 000000000..f6a98c93d
--- /dev/null
+++ b/install/ui/test/functional/service-mod.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Service</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Service</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=5</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='service']/span[@name='search']//input[@value='testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testservice/test.example.com@IDM.LAB.BOS.REDHAT.COM:</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/service-suite.html b/install/ui/test/functional/service-suite.html
new file mode 100644
index 000000000..bf7d817f9
--- /dev/null
+++ b/install/ui/test/functional/service-suite.html
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="host-add.html">Add Host</a></td></tr>
+<tr><td><a href="service-add.html">Add Service</a></td></tr>
+<tr><td><a href="service-find.html">Search Service</a></td></tr>
+<tr><td><a href="service-mod.html">Edit Service</a></td></tr>
+<tr><td><a href="service-certificate.html">Service Certificate</a></td></tr>
+<tr><td><a href="service-del.html">Delete Service</a></td></tr>
+<tr><td><a href="host-del.html">Delete Host</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmd-add.html b/install/ui/test/functional/sudocmd-add.html
new file mode 100644
index 000000000..b47f14566
--- /dev/null
+++ b/install/ui/test/functional/sudocmd-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Sudo Command</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Sudo Command</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 sudo command matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>sudocmd</td>
+ <td>testsudocmd</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Sudo Command</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmd-del.html b/install/ui/test/functional/sudocmd-del.html
new file mode 100644
index 000000000..2d41ee845
--- /dev/null
+++ b/install/ui/test/functional/sudocmd-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Sudo Command</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Sudo Command</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmd-find.html b/install/ui/test/functional/sudocmd-find.html
new file mode 100644
index 000000000..358e34bdc
--- /dev/null
+++ b/install/ui/test/functional/sudocmd-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Sudo Command</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Sudo Command</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudocmd-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudocmd-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudocmd-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmd-membership.html b/install/ui/test/functional/sudocmd-membership.html
new file mode 100644
index 000000000..db0c91033
--- /dev/null
+++ b/install/ui/test/functional/sudocmd-membership.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Command Membership</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Command Membership</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudocmd:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Add</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='memberof_sudocmdgroup']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='memberof_sudocmdgroup']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='memberof_sudocmdgroup']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmd-mod.html b/install/ui/test/functional/sudocmd-mod.html
new file mode 100644
index 000000000..69d4a9533
--- /dev/null
+++ b/install/ui/test/functional/sudocmd-mod.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Sudo Command</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Sudo Command</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudocmd</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudocmd:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Sudo Command</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmd-suite.html b/install/ui/test/functional/sudocmd-suite.html
new file mode 100644
index 000000000..560171fc1
--- /dev/null
+++ b/install/ui/test/functional/sudocmd-suite.html
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="sudocmd-add.html">Add Sudo Command</a></td></tr>
+<tr><td><a href="sudocmd-find.html">Search Sudo Command</a></td></tr>
+<tr><td><a href="sudocmd-mod.html">Edit Sudo Command</a></td></tr>
+<tr><td><a href="sudocmdgroup-add.html">Add Sudo Command Group</a></td></tr>
+<tr><td><a href="sudocmd-membership.html">Sudo Command Membership</a></td></tr>
+<tr><td><a href="sudocmdgroup-del.html">Delete Sudo Command Group</a></td></tr>
+<tr><td><a href="sudocmd-del.html">Delete Sudo Command</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmdgroup-add.html b/install/ui/test/functional/sudocmdgroup-add.html
new file mode 100644
index 000000000..e467de096
--- /dev/null
+++ b/install/ui/test/functional/sudocmdgroup-add.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Sudo Command Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Sudo Command Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>0 sudo command groups matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testsudocmdgroup</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td>Test Sudo Command Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmdgroup-del.html b/install/ui/test/functional/sudocmdgroup-del.html
new file mode 100644
index 000000000..b74ea6468
--- /dev/null
+++ b/install/ui/test/functional/sudocmdgroup-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Sudo Command Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Sudo Command Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmdgroup-find.html b/install/ui/test/functional/sudocmdgroup-find.html
new file mode 100644
index 000000000..585d2af38
--- /dev/null
+++ b/install/ui/test/functional/sudocmdgroup-find.html
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Sudo Command Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Sudo Command Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudocmdgroup-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudocmdgroup-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudocmdgroup-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Find</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmdgroup-member.html b/install/ui/test/functional/sudocmdgroup-member.html
new file mode 100644
index 000000000..38115813d
--- /dev/null
+++ b/install/ui/test/functional/sudocmdgroup-member.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Command Group Member</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Command Group Member</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudocmdgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Add</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='member_sudocmd']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='member_sudocmd']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='member_sudocmd']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmdgroup-mod.html b/install/ui/test/functional/sudocmdgroup-mod.html
new file mode 100644
index 000000000..c4d87a1c7
--- /dev/null
+++ b/install/ui/test/functional/sudocmdgroup-mod.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Sudo Command Group</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Sudo Command Group</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2&amp;sudorule-entity=sudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudocmdgroup']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudocmdgroup</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudocmdgroup:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Sudo Command Group</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudocmdgroup-suite.html b/install/ui/test/functional/sudocmdgroup-suite.html
new file mode 100644
index 000000000..846162356
--- /dev/null
+++ b/install/ui/test/functional/sudocmdgroup-suite.html
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="sudocmdgroup-add.html">Add Sudo Command Group</a></td></tr>
+<tr><td><a href="sudocmdgroup-find.html">Search Sudo Command Group</a></td></tr>
+<tr><td><a href="sudocmdgroup-mod.html">Edit Sudo Command Group</a></td></tr>
+<tr><td><a href="sudocmd-add.html">Add Sudo Command</a></td></tr>
+<tr><td><a href="sudocmdgroup-member.html">Sudo Command Group Member</a></td></tr>
+<tr><td><a href="sudocmd-del.html">Delete Sudo Command</a></td></tr>
+<tr><td><a href="sudocmdgroup-del.html">Delete Sudo Command Group</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-activation.html b/install/ui/test/functional/sudorule-activation.html
new file mode 100644
index 000000000..e5ecc423a
--- /dev/null
+++ b/install/ui/test/functional/sudorule-activation.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Rule Activation</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Rule Activation</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudorule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudorule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='ipaenabledflag' and @value='FALSE']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>ipaenabledflag</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-add.html b/install/ui/test/functional/sudorule-add.html
new file mode 100644
index 000000000..4770d7de5
--- /dev/null
+++ b/install/ui/test/functional/sudorule-add.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add Sudo Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add Sudo Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']/div[@class='action-panel']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>cn</td>
+ <td>testsudorule</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-allow-command.html b/install/ui/test/functional/sudorule-allow-command.html
new file mode 100644
index 000000000..b1bf71975
--- /dev/null
+++ b/install/ui/test/functional/sudorule-allow-command.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Rule Allow Command</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Rule Allow Command</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudorule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudorule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='cmdcategory']//span[@name='memberallowcmd_sudocmd']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='cmdcategory']//span[@name='memberallowcmd_sudocmd']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='cmdcategory']//span[@name='memberallowcmd_sudocmd']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='cmdcategory']//span[@name='memberallowcmd_sudocmd']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='cmdcategory']//span[@name='memberallowcmd_sudocmd']//input[@value='testsudocmd']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-del.html b/install/ui/test/functional/sudorule-del.html
new file mode 100644
index 000000000..fff437bc0
--- /dev/null
+++ b/install/ui/test/functional/sudorule-del.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete Sudo Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete Sudo Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']/div[@class='action-panel']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-find.html b/install/ui/test/functional/sudorule-find.html
new file mode 100644
index 000000000..20d8db88f
--- /dev/null
+++ b/install/ui/test/functional/sudorule-find.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Search Sudo Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Search Sudo Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForNotVisible</td>
+ <td>//span[@id='header-network-activity-indicator']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudorule-filter</td>
+ <td>test</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudorule-filter</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-sudorule-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-host.html b/install/ui/test/functional/sudorule-host.html
new file mode 100644
index 000000000..8b552d6a3
--- /dev/null
+++ b/install/ui/test/functional/sudorule-host.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Rule Host</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Rule Host</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudorule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudorule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='hostcategory']//span[@name='memberhost_host']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='hostcategory']//span[@name='memberhost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='hostcategory']//span[@name='memberhost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='hostcategory']//span[@name='memberhost_host']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='hostcategory']//span[@name='memberhost_host']//input[@value='test.example.com']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-mod.html b/install/ui/test/functional/sudorule-mod.html
new file mode 100644
index 000000000..1e869edaf
--- /dev/null
+++ b/install/ui/test/functional/sudorule-mod.html
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit Sudo Rule</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit Sudo Rule</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudorule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudorule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>Test Sudo Rule</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>description</td>
+ <td>xxx</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>description</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-runasuser.html b/install/ui/test/functional/sudorule-runasuser.html
new file mode 100644
index 000000000..d78a9fcb2
--- /dev/null
+++ b/install/ui/test/functional/sudorule-runasuser.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Rule Run-As User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Rule Run-As User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudorule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudorule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='ipasudorunasusercategory']//span[@name='ipasudorunas_user']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='ipasudorunasusercategory']//span[@name='ipasudorunas_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='ipasudorunasusercategory']//span[@name='ipasudorunas_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='ipasudorunasusercategory']//span[@name='ipasudorunas_user']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='ipasudorunasusercategory']//span[@name='ipasudorunas_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-suite.html b/install/ui/test/functional/sudorule-suite.html
new file mode 100644
index 000000000..fa326eb14
--- /dev/null
+++ b/install/ui/test/functional/sudorule-suite.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="user-add.html">Add User</a></td></tr>
+<tr><td><a href="host-add.html">Add Host</a></td></tr>
+<tr><td><a href="sudocmd-add.html">Add Sudo Command</a></td></tr>
+<tr><td><a href="sudorule-add.html">Add Sudo Rule</a></td></tr>
+<tr><td><a href="sudorule-find.html">Search Sudo Rule</a></td></tr>
+<tr><td><a href="sudorule-mod.html">Edit Sudo Rule</a></td></tr>
+<tr><td><a href="sudorule-activation.html">Sudo Rule Activation</a></td></tr>
+<tr><td><a href="sudorule-user.html">Sudo Rule User</a></td></tr>
+<tr><td><a href="sudorule-host.html">Sudo Rule Host</a></td></tr>
+<tr><td><a href="sudorule-allow-command.html">Sudo Rule Allow Command</a></td></tr>
+<tr><td><a href="sudorule-runasuser.html">Sudo Rule Run-As User</a></td></tr>
+<tr><td><a href="sudorule-del.html">Delete Sudo Rule</a></td></tr>
+<tr><td><a href="sudocmd-del.html">Delete Sudo Command</a></td></tr>
+<tr><td><a href="host-del.html">Delete Host</a></td></tr>
+<tr><td><a href="user-del.html">Delete User</a></td></tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/sudorule-user.html b/install/ui/test/functional/sudorule-user.html
new file mode 100644
index 000000000..5846b293c
--- /dev/null
+++ b/install/ui/test/functional/sudorule-user.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Sudo Rule User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Sudo Rule User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=1&amp;policy=2</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='search']//input[@value='testsudorule']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testsudorule</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testsudorule:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='usercategory']//span[@name='memberuser_user']//a[@title='Add']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@name='available']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@name='available']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=&gt;&gt;</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='sudorule']//span[@name='usercategory']//span[@name='memberuser_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='usercategory']//span[@name='memberuser_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='sudorule']//span[@name='usercategory']//span[@name='memberuser_user']//a[@title='Delete']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>//div[@id='sudorule']//span[@name='usercategory']//span[@name='memberuser_user']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-activation.html b/install/ui/test/functional/user-activation.html
new file mode 100644
index 000000000..6110311fb
--- /dev/null
+++ b/install/ui/test/functional/user-activation.html
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Activate User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Activate User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testuser</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=span[name=nsaccountlock] a</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyText</td>
+ <td>css=span[name=nsaccountlock] a</td>
+ <td>regexp:Active:.*</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>userstatuslink</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=span[name=nsaccountlock] a[title=Inactive]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyText</td>
+ <td>css=span[name=nsaccountlock] a</td>
+ <td>regexp:Inactive:.*</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>userstatuslink</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=span[name=nsaccountlock] a[title=Active]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyText</td>
+ <td>css=span[name=nsaccountlock] a</td>
+ <td>regexp:Active:.*</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='user']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-add.html b/install/ui/test/functional/user-add.html
new file mode 100644
index 000000000..d5a226797
--- /dev/null
+++ b/install/ui/test/functional/user-add.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Add user</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Add user</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 user matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Add</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>uid</td>
+ <td>testuser</td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>givenname</td>
+ <td>Test</td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>sn</td>
+ <td>User</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='user']/span[@name='search']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-del.html b/install/ui/test/functional/user-del.html
new file mode 100644
index 000000000..3d1267604
--- /dev/null
+++ b/install/ui/test/functional/user-del.html
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Delete User</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Delete User</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//input[@name='select' and @value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Delete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//button[@type='button']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 user matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-find.html b/install/ui/test/functional/user-find.html
new file mode 100644
index 000000000..8d4b588a8
--- /dev/null
+++ b/install/ui/test/functional/user-find.html
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>View Users</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">View Users</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-user-filter</td>
+ <td>testuser</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='user']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>1 user matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>search-user-filter</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='user']/span/div[1]/span[1]/a/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-mod.html b/install/ui/test/functional/user-mod.html
new file mode 100644
index 000000000..25643615f
--- /dev/null
+++ b/install/ui/test/functional/user-mod.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Edit user</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Edit user</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testuser</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>testuser:</td>
+ <td></td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>title</td>
+ <td>Software Engineer</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Add</td>
+ <td></td>
+</tr>
+<!--BUG: typeKeys doesn't work with "."-->
+<tr>
+ <td>type</td>
+ <td>mail</td>
+ <td>testuser@example.</td>
+</tr>
+<tr>
+ <td>typeKeys</td>
+ <td>mail</td>
+ <td>com</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Update</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextNotPresent</td>
+ <td>undo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>css=li.back-to-search span.input_link</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>//div[@id='user']/span[@name='search']//input[@value='testuser']</td>
+ <td></td>
+</tr>
+<tr>
+ <td>verifyText</td>
+ <td>css=table.search-table tbody tr:nth-child(2) span[name=mail]</td>
+ <td>testuser@example.com</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-password-reset.html b/install/ui/test/functional/user-password-reset.html
new file mode 100644
index 000000000..4ca6891a9
--- /dev/null
+++ b/install/ui/test/functional/user-password-reset.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="https://localhost/" />
+<title>Password Reset</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Password Reset</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/ipa/ui/#navigation=0&amp;identity=0</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=testuser</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementPresent</td>
+ <td>css=span[name=userpassword] a[title=userpassword]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>link=Reset Password</td>
+ <td></td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>//input[@type='password']</td>
+ <td>Secret123</td>
+</tr>
+<tr>
+ <td>type</td>
+ <td>//dd[2]/input</td>
+ <td>Secret123</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>xpath=/html/body/div[3]//button[1]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForElementNotPresent</td>
+ <td>xpath=/html/body/div[3]</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForAlert</td>
+ <td>Password change complete</td>
+ <td></td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='user']/div[1]/ul/li[1]/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>waitForTextPresent</td>
+ <td>2 users matched</td>
+ <td></td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/install/ui/test/functional/user-suite.html b/install/ui/test/functional/user-suite.html
new file mode 100644
index 000000000..0767088f4
--- /dev/null
+++ b/install/ui/test/functional/user-suite.html
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Test Suite</title>
+</head>
+<body>
+<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
+<tr><td><b>Test Suite</b></td></tr>
+<tr><td><a href="user-add.html">Add User</a></td></tr>
+<tr><td><a href="user-find.html">Search User</a></td></tr>
+<tr><td><a href="user-mod.html">Edit User</a></td></tr>
+<tr><td><a href="user-activation.html">User Activation</a></td></tr>
+<tr><td><a href="user-password-reset.html">Password Reset</a></td></tr>
+<tr><td><a href="user-del.html">Delete User</a></td></tr>
+</tbody></table>
+</body>
+</html>