[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Freeipa-devel] [PATCH] Initial Selenium test cases.



On 3/31/2011 12:06 PM, Endi Sukma Dewata wrote:
http://www.freeipa.org/page/Selenium

Patch included.

--
Endi S. Dewata
From 94bf6340dabb5fed0201b88182ce24e38455e57a Mon Sep 17 00:00:00 2001
From: Endi S. Dewata <edewata redhat com>
Date: Wed, 30 Mar 2011 22:52:28 -0400
Subject: [PATCH] Initial Selenium test cases.

http://www.freeipa.org/page/Selenium
---
 install/ui/test/bin/selenium.sh                    |   26 ++++
 .../ui/test/functional/group-add-member-user.html  |   81 ++++++++++++
 install/ui/test/functional/group-add.html          |   51 +++++++
 install/ui/test/functional/group-del.html          |   46 +++++++
 install/ui/test/functional/group-find.html         |   56 ++++++++
 install/ui/test/functional/group-mod.html          |   86 ++++++++++++
 .../test/functional/group-remove-member-user.html  |   76 +++++++++++
 install/ui/test/functional/group-suite.html        |   21 +++
 .../ui/test/functional/hbacrule-activation.html    |   67 ++++++++++
 install/ui/test/functional/hbacrule-add.html       |   51 +++++++
 install/ui/test/functional/hbacrule-del.html       |   46 +++++++
 install/ui/test/functional/hbacrule-find.html      |   72 ++++++++++
 install/ui/test/functional/hbacrule-host.html      |   87 +++++++++++++
 install/ui/test/functional/hbacrule-mod.html       |   87 +++++++++++++
 install/ui/test/functional/hbacrule-service.html   |   86 ++++++++++++
 .../ui/test/functional/hbacrule-sourcehost.html    |   86 ++++++++++++
 install/ui/test/functional/hbacrule-suite.html     |   30 +++++
 install/ui/test/functional/hbacrule-user.html      |   86 ++++++++++++
 install/ui/test/functional/hbacsvc-add.html        |   51 +++++++
 install/ui/test/functional/hbacsvc-del.html        |   46 +++++++
 install/ui/test/functional/hbacsvc-find.html       |   72 ++++++++++
 install/ui/test/functional/hbacsvc-mod.html        |   77 +++++++++++
 install/ui/test/functional/hbacsvc-suite.html      |   17 +++
 .../test/functional/hbacsvcgroup-add-member.html   |   67 ++++++++++
 install/ui/test/functional/hbacsvcgroup-add.html   |   52 ++++++++
 install/ui/test/functional/hbacsvcgroup-del.html   |   47 +++++++
 install/ui/test/functional/hbacsvcgroup-find.html  |   72 ++++++++++
 install/ui/test/functional/hbacsvcgroup-mod.html   |   77 +++++++++++
 .../functional/hbacsvcgroup-remove-member.html     |   62 +++++++++
 install/ui/test/functional/hbacsvcgroup-suite.html |   21 +++
 install/ui/test/functional/host-add.html           |   51 +++++++
 install/ui/test/functional/host-certificate.html   |  121 +++++++++++++++++
 install/ui/test/functional/host-del.html           |   46 +++++++
 install/ui/test/functional/host-find.html          |   56 ++++++++
 install/ui/test/functional/host-mod.html           |   71 ++++++++++
 install/ui/test/functional/host-suite.html         |   18 +++
 .../test/functional/hostgroup-add-member-host.html |   82 ++++++++++++
 install/ui/test/functional/hostgroup-add.html      |   52 ++++++++
 install/ui/test/functional/hostgroup-del.html      |   46 +++++++
 install/ui/test/functional/hostgroup-find.html     |   72 ++++++++++
 install/ui/test/functional/hostgroup-mod           |   77 +++++++++++
 .../functional/hostgroup-remove-member-host.html   |   76 +++++++++++
 install/ui/test/functional/hostgroup-suite.html    |   21 +++
 install/ui/test/functional/krbtpolicy-mod.html     |   66 ++++++++++
 install/ui/test/functional/krbtpolicy-suite.html   |   14 ++
 .../test/functional/netgroup-add-member-user.html  |   72 ++++++++++
 install/ui/test/functional/netgroup-add.html       |   52 ++++++++
 install/ui/test/functional/netgroup-del.html       |   47 +++++++
 install/ui/test/functional/netgroup-find.html      |   72 ++++++++++
 install/ui/test/functional/netgroup-mod.html       |  137 ++++++++++++++++++++
 .../functional/netgroup-remove-member-user.html    |   67 ++++++++++
 install/ui/test/functional/netgroup-suite.html     |   21 +++
 install/ui/test/functional/permission-add.html     |   66 ++++++++++
 install/ui/test/functional/permission-del.html     |   46 +++++++
 install/ui/test/functional/permission-find.html    |   72 ++++++++++
 install/ui/test/functional/permission-mod.html     |  107 +++++++++++++++
 install/ui/test/functional/permission-suite.html   |   17 +++
 install/ui/test/functional/privilege-add.html      |   51 +++++++
 install/ui/test/functional/privilege-del.html      |   46 +++++++
 install/ui/test/functional/privilege-find.html     |   71 ++++++++++
 install/ui/test/functional/privilege-mod.html      |   76 +++++++++++
 install/ui/test/functional/privilege-suite.html    |   17 +++
 install/ui/test/functional/pwpolicy-add.html       |   51 +++++++
 install/ui/test/functional/pwpolicy-del.html       |   47 +++++++
 install/ui/test/functional/pwpolicy-mod.html       |   86 ++++++++++++
 install/ui/test/functional/pwpolicy-suite.html     |   18 +++
 install/ui/test/functional/role-add.html           |   51 +++++++
 install/ui/test/functional/role-del.html           |   46 +++++++
 install/ui/test/functional/role-find.html          |   71 ++++++++++
 install/ui/test/functional/role-mod.html           |   77 +++++++++++
 install/ui/test/functional/role-suite.html         |   17 +++
 install/ui/test/functional/service-add.html        |   56 ++++++++
 .../ui/test/functional/service-certificate.html    |  111 ++++++++++++++++
 install/ui/test/functional/service-del.html        |   47 +++++++
 install/ui/test/functional/service-find.html       |   57 ++++++++
 install/ui/test/functional/service-mod.html        |   37 ++++++
 install/ui/test/functional/service-suite.html      |   20 +++
 install/ui/test/functional/sudocmd-add.html        |   51 +++++++
 install/ui/test/functional/sudocmd-del.html        |   46 +++++++
 install/ui/test/functional/sudocmd-find.html       |   72 ++++++++++
 install/ui/test/functional/sudocmd-membership.html |   87 +++++++++++++
 install/ui/test/functional/sudocmd-mod.html        |   77 +++++++++++
 install/ui/test/functional/sudocmd-suite.html      |   20 +++
 install/ui/test/functional/sudocmdgroup-add.html   |   51 +++++++
 install/ui/test/functional/sudocmdgroup-del.html   |   46 +++++++
 install/ui/test/functional/sudocmdgroup-find.html  |   72 ++++++++++
 .../ui/test/functional/sudocmdgroup-member.html    |   87 +++++++++++++
 install/ui/test/functional/sudocmdgroup-mod.html   |   77 +++++++++++
 install/ui/test/functional/sudocmdgroup-suite.html |   20 +++
 .../ui/test/functional/sudorule-activation.html    |   67 ++++++++++
 install/ui/test/functional/sudorule-add.html       |   52 ++++++++
 .../ui/test/functional/sudorule-allow-command.html |   87 +++++++++++++
 install/ui/test/functional/sudorule-del.html       |   56 ++++++++
 install/ui/test/functional/sudorule-find.html      |   77 +++++++++++
 install/ui/test/functional/sudorule-host.html      |   86 ++++++++++++
 install/ui/test/functional/sudorule-mod.html       |   77 +++++++++++
 install/ui/test/functional/sudorule-runasuser.html |   86 ++++++++++++
 install/ui/test/functional/sudorule-suite.html     |   28 ++++
 install/ui/test/functional/sudorule-user.html      |   86 ++++++++++++
 install/ui/test/functional/user-activation.html    |   81 ++++++++++++
 install/ui/test/functional/user-add.html           |   56 ++++++++
 install/ui/test/functional/user-del.html           |   46 +++++++
 install/ui/test/functional/user-find.html          |   56 ++++++++
 install/ui/test/functional/user-mod.html           |   82 ++++++++++++
 .../ui/test/functional/user-password-reset.html    |   76 +++++++++++
 install/ui/test/functional/user-suite.html         |   19 +++
 106 files changed, 6324 insertions(+), 0 deletions(-)
 create mode 100755 install/ui/test/bin/selenium.sh
 create mode 100644 install/ui/test/functional/group-add-member-user.html
 create mode 100644 install/ui/test/functional/group-add.html
 create mode 100644 install/ui/test/functional/group-del.html
 create mode 100644 install/ui/test/functional/group-find.html
 create mode 100644 install/ui/test/functional/group-mod.html
 create mode 100644 install/ui/test/functional/group-remove-member-user.html
 create mode 100644 install/ui/test/functional/group-suite.html
 create mode 100644 install/ui/test/functional/hbacrule-activation.html
 create mode 100644 install/ui/test/functional/hbacrule-add.html
 create mode 100644 install/ui/test/functional/hbacrule-del.html
 create mode 100644 install/ui/test/functional/hbacrule-find.html
 create mode 100644 install/ui/test/functional/hbacrule-host.html
 create mode 100644 install/ui/test/functional/hbacrule-mod.html
 create mode 100644 install/ui/test/functional/hbacrule-service.html
 create mode 100644 install/ui/test/functional/hbacrule-sourcehost.html
 create mode 100644 install/ui/test/functional/hbacrule-suite.html
 create mode 100644 install/ui/test/functional/hbacrule-user.html
 create mode 100644 install/ui/test/functional/hbacsvc-add.html
 create mode 100644 install/ui/test/functional/hbacsvc-del.html
 create mode 100644 install/ui/test/functional/hbacsvc-find.html
 create mode 100644 install/ui/test/functional/hbacsvc-mod.html
 create mode 100644 install/ui/test/functional/hbacsvc-suite.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-add-member.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-add.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-del.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-find.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-mod.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-remove-member.html
 create mode 100644 install/ui/test/functional/hbacsvcgroup-suite.html
 create mode 100644 install/ui/test/functional/host-add.html
 create mode 100644 install/ui/test/functional/host-certificate.html
 create mode 100644 install/ui/test/functional/host-del.html
 create mode 100644 install/ui/test/functional/host-find.html
 create mode 100644 install/ui/test/functional/host-mod.html
 create mode 100644 install/ui/test/functional/host-suite.html
 create mode 100644 install/ui/test/functional/hostgroup-add-member-host.html
 create mode 100644 install/ui/test/functional/hostgroup-add.html
 create mode 100644 install/ui/test/functional/hostgroup-del.html
 create mode 100644 install/ui/test/functional/hostgroup-find.html
 create mode 100644 install/ui/test/functional/hostgroup-mod
 create mode 100644 install/ui/test/functional/hostgroup-remove-member-host.html
 create mode 100644 install/ui/test/functional/hostgroup-suite.html
 create mode 100644 install/ui/test/functional/krbtpolicy-mod.html
 create mode 100644 install/ui/test/functional/krbtpolicy-suite.html
 create mode 100644 install/ui/test/functional/netgroup-add-member-user.html
 create mode 100644 install/ui/test/functional/netgroup-add.html
 create mode 100644 install/ui/test/functional/netgroup-del.html
 create mode 100644 install/ui/test/functional/netgroup-find.html
 create mode 100644 install/ui/test/functional/netgroup-mod.html
 create mode 100644 install/ui/test/functional/netgroup-remove-member-user.html
 create mode 100644 install/ui/test/functional/netgroup-suite.html
 create mode 100644 install/ui/test/functional/permission-add.html
 create mode 100644 install/ui/test/functional/permission-del.html
 create mode 100644 install/ui/test/functional/permission-find.html
 create mode 100644 install/ui/test/functional/permission-mod.html
 create mode 100644 install/ui/test/functional/permission-suite.html
 create mode 100644 install/ui/test/functional/privilege-add.html
 create mode 100644 install/ui/test/functional/privilege-del.html
 create mode 100644 install/ui/test/functional/privilege-find.html
 create mode 100644 install/ui/test/functional/privilege-mod.html
 create mode 100644 install/ui/test/functional/privilege-suite.html
 create mode 100644 install/ui/test/functional/pwpolicy-add.html
 create mode 100644 install/ui/test/functional/pwpolicy-del.html
 create mode 100644 install/ui/test/functional/pwpolicy-mod.html
 create mode 100644 install/ui/test/functional/pwpolicy-suite.html
 create mode 100644 install/ui/test/functional/role-add.html
 create mode 100644 install/ui/test/functional/role-del.html
 create mode 100644 install/ui/test/functional/role-find.html
 create mode 100644 install/ui/test/functional/role-mod.html
 create mode 100644 install/ui/test/functional/role-suite.html
 create mode 100644 install/ui/test/functional/service-add.html
 create mode 100644 install/ui/test/functional/service-certificate.html
 create mode 100644 install/ui/test/functional/service-del.html
 create mode 100644 install/ui/test/functional/service-find.html
 create mode 100644 install/ui/test/functional/service-mod.html
 create mode 100644 install/ui/test/functional/service-suite.html
 create mode 100644 install/ui/test/functional/sudocmd-add.html
 create mode 100644 install/ui/test/functional/sudocmd-del.html
 create mode 100644 install/ui/test/functional/sudocmd-find.html
 create mode 100644 install/ui/test/functional/sudocmd-membership.html
 create mode 100644 install/ui/test/functional/sudocmd-mod.html
 create mode 100644 install/ui/test/functional/sudocmd-suite.html
 create mode 100644 install/ui/test/functional/sudocmdgroup-add.html
 create mode 100644 install/ui/test/functional/sudocmdgroup-del.html
 create mode 100644 install/ui/test/functional/sudocmdgroup-find.html
 create mode 100644 install/ui/test/functional/sudocmdgroup-member.html
 create mode 100644 install/ui/test/functional/sudocmdgroup-mod.html
 create mode 100644 install/ui/test/functional/sudocmdgroup-suite.html
 create mode 100644 install/ui/test/functional/sudorule-activation.html
 create mode 100644 install/ui/test/functional/sudorule-add.html
 create mode 100644 install/ui/test/functional/sudorule-allow-command.html
 create mode 100644 install/ui/test/functional/sudorule-del.html
 create mode 100644 install/ui/test/functional/sudorule-find.html
 create mode 100644 install/ui/test/functional/sudorule-host.html
 create mode 100644 install/ui/test/functional/sudorule-mod.html
 create mode 100644 install/ui/test/functional/sudorule-runasuser.html
 create mode 100644 install/ui/test/functional/sudorule-suite.html
 create mode 100644 install/ui/test/functional/sudorule-user.html
 create mode 100644 install/ui/test/functional/user-activation.html
 create mode 100644 install/ui/test/functional/user-add.html
 create mode 100644 install/ui/test/functional/user-del.html
 create mode 100644 install/ui/test/functional/user-find.html
 create mode 100644 install/ui/test/functional/user-mod.html
 create mode 100644 install/ui/test/functional/user-password-reset.html
 create mode 100644 install/ui/test/functional/user-suite.html

diff --git a/install/ui/test/bin/selenium.sh b/install/ui/test/bin/selenium.sh
new file mode 100755
index 0000000000000000000000000000000000000000..034b1df6f5bb7fbe8312e826c081b9116c9ea806
--- /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 0000000000000000000000000000000000000000..b0b18f350bf6c590c78ebb973b6c2dc4152594f2
--- /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 0000000000000000000000000000000000000000..6d59588dfcec350c7ae5be7da30457ee0e368000
--- /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 0000000000000000000000000000000000000000..a05f52cfe2afc2d44cc8c2906f051768e81475ec
--- /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 0000000000000000000000000000000000000000..ebc5624d5f6be5935ae1e97ac001cb4a3d941bac
--- /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 0000000000000000000000000000000000000000..bc8104080cf393bc9854ab01dd2d07015dcb2b83
--- /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 0000000000000000000000000000000000000000..9b37afcbe8cb88b1c3a95314605cf8e43a4e2fc2
--- /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 0000000000000000000000000000000000000000..493d909118accf2510b815d080bf38ff1742b7b6
--- /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 0000000000000000000000000000000000000000..b5397eb02d5afe32edc8c63f100a8435306b7ed0
--- /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 0000000000000000000000000000000000000000..2dd46b6652848cea878a5fd5eb5c7990dc3c4d37
--- /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 0000000000000000000000000000000000000000..ca6d0b8e76b8925ed23e95491385353c1b828b26
--- /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 0000000000000000000000000000000000000000..9fcec8a61ffb5015d7949a780b22dc2a95c1984c
--- /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 0000000000000000000000000000000000000000..bcaff8728b9186416f372e25d37e88b10168e8dc
--- /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 0000000000000000000000000000000000000000..18c2be91cc52368cff9b069e8e1fa32059e1c975
--- /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 0000000000000000000000000000000000000000..98090486571a5d6367bda8faec2cd58960b207ef
--- /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 0000000000000000000000000000000000000000..ae998b803b1ea53b1999899491030a48b11ddb06
--- /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 0000000000000000000000000000000000000000..d52cecebcfb0b1738a5b4b5fdb75287545a618a1
--- /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 0000000000000000000000000000000000000000..35d0a52e688c2c617de3188be3978aaec0770ebe
--- /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 0000000000000000000000000000000000000000..b9a1d890bef3331a80035712fa99df4f2e8e1cf6
--- /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 0000000000000000000000000000000000000000..030aa97236436ba06916f4559490b4368a763be1
--- /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 0000000000000000000000000000000000000000..77ae0ab5c864e14a761e77bfa676db9285baa639
--- /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 0000000000000000000000000000000000000000..0de96ca227b1dd952b52f3a30e5697edcd94dcdc
--- /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 0000000000000000000000000000000000000000..381ed63275f4e846a3a8330749b9cd88d6e39bbd
--- /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 0000000000000000000000000000000000000000..9574d396bda4d25b54c91bea27542d1f8ac5cf77
--- /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 0000000000000000000000000000000000000000..71c84df66c173bf9bd2d5451d5664b573369e121
--- /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 0000000000000000000000000000000000000000..3027ca39914e3c90e5901afa2b9748b0ce2d8bc9
--- /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 0000000000000000000000000000000000000000..2203d1425c2da0f13884d70f0a65f8c7ba915ce6
--- /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 0000000000000000000000000000000000000000..68561404f214b96cca93b79e78ba4db07deda096
--- /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 0000000000000000000000000000000000000000..4fc731237a8d7c9ae975ed66e3ef3ae59c55d6c6
--- /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 0000000000000000000000000000000000000000..2b9763965a1a61a3206b3892232e44b4b9947635
--- /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 0000000000000000000000000000000000000000..9ea659b1804517aa71569c6d248e26734bed52d4
--- /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 0000000000000000000000000000000000000000..3931204ec9cdf6ad28d21d37951e4ed51ecce9e1
--- /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 0000000000000000000000000000000000000000..38554bac68f7215307a7dc66863b89b9950adcea
--- /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 0000000000000000000000000000000000000000..cb9235d79a701a5cbc1aad9062d6f7131909f4bd
--- /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 0000000000000000000000000000000000000000..773a9e82684f41de8082222f6fe39c65cfa76dcc
--- /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 0000000000000000000000000000000000000000..c58a751cfbf56363f6894b41bc29df8ed2830252
--- /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 0000000000000000000000000000000000000000..1030d6a5384ad7b2d3a79f87fd8fbeb8e2ed2183
--- /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 0000000000000000000000000000000000000000..116c47254238ee79aaab025f3e10eabca015132c
--- /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 0000000000000000000000000000000000000000..e062f6479335489789ad224dca7e5bf9dde78384
--- /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 0000000000000000000000000000000000000000..08476f5cab9546fb4e3cb0df6e5b48eb40fafe8f
--- /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 0000000000000000000000000000000000000000..a14029f93c2c223c0649237f5788b3b4f8731623
--- /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 0000000000000000000000000000000000000000..7fd1ad58259885d8436448dcd428c13e54d2fb61
--- /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 0000000000000000000000000000000000000000..0f681c1c5bab96783210c33fac4258fd43ffe6d8
--- /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 0000000000000000000000000000000000000000..e10406701f76f8feba7c32b0cc5efbe567d70c0e
--- /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 0000000000000000000000000000000000000000..9eccf04f25f7c4e57f635776d00c56090298e90b
--- /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 0000000000000000000000000000000000000000..e985f2b139b8aab6a4feb87a1cebcc5d882eb1f3
--- /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 0000000000000000000000000000000000000000..d4935ce58a534fa10f7b2054fb346ce1cee92aca
--- /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 0000000000000000000000000000000000000000..226c0c1fe2879cdb35b171e856f854bc9f3e4d7d
--- /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 0000000000000000000000000000000000000000..ac2a0f06144506b49ceae7b8415cf27264d1420f
--- /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 0000000000000000000000000000000000000000..03407d0ba44f37ac2b4b8b078af4696de1a3100f
--- /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 0000000000000000000000000000000000000000..beb3939cd4faf5dbe98e6c1a73b4c7e557ee2ffa
--- /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 0000000000000000000000000000000000000000..5fe3fc1075532ffba03affb146af3b6c8473c81e
--- /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 0000000000000000000000000000000000000000..d8b4afb1fb796179e285c9ff5ffa4af652a2c97d
--- /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 0000000000000000000000000000000000000000..77f7b4df1745e48c872729cb71f21c4e61d2c205
--- /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 0000000000000000000000000000000000000000..1b250838c0e4385e00004bd77131e701545097ec
--- /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 0000000000000000000000000000000000000000..ae8489b2cfd8e00683116cea51897ec5066391e1
--- /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 0000000000000000000000000000000000000000..6f50bb7a5df1965cafa6dc248802ae574a2b0f1c
--- /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 0000000000000000000000000000000000000000..2cc276940f6e632e3fab69190ba95cb7bbac1e6a
--- /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 0000000000000000000000000000000000000000..d206eb4bcf1974af555eda644393dafd86d6c974
--- /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 0000000000000000000000000000000000000000..f7bda6bdfe2dfe4df0ea3c9925535e598b057862
--- /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 0000000000000000000000000000000000000000..92a33d82026eda90a1cfde9d0c94990b83ae8681
--- /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 0000000000000000000000000000000000000000..ff165696f8304fb426e909bf2ec290ce883c75c9
--- /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 0000000000000000000000000000000000000000..c53df39ed6c4f9c5b3d8364091568dd692b0d2c0
--- /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 0000000000000000000000000000000000000000..d9dd0fa75b96f1f70af67163b74f42d3bc2a70b0
--- /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 0000000000000000000000000000000000000000..5e85a38d29ae79fb1f050f9c0bcfa49da515fd0a
--- /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 0000000000000000000000000000000000000000..2ce33acec221e6608ad4f0080f813cc75ac3cf19
--- /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 0000000000000000000000000000000000000000..9d6bc56aab786cec1b7289dffb73b8acd2eb7fb4
--- /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 0000000000000000000000000000000000000000..0f7dcedc17a079c3878b82256c5fea4a1a073ec7
--- /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 0000000000000000000000000000000000000000..f8c21b4f3685f060e0306464968cd2fcca959211
--- /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 0000000000000000000000000000000000000000..aa499fda3f59be67db46cb50e935f768da9ec2aa
--- /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 0000000000000000000000000000000000000000..9b387bb9deea859a1e1d6e27efd4fa6f89ded8d3
--- /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 0000000000000000000000000000000000000000..65bf199bbfeb8c9214141d14441fb251dfcee750
--- /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 0000000000000000000000000000000000000000..64e18bf1fc97a6104050028ce2ddd34255eae928
--- /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 0000000000000000000000000000000000000000..da68b89b9c9a77400f67a27385464d7d935d676c
--- /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 0000000000000000000000000000000000000000..f704b5d9ed67c1c9e07f5387cbdece7a243b4334
--- /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 0000000000000000000000000000000000000000..f6a98c93d162a798ea178347c767f19d6d4aead8
--- /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 0000000000000000000000000000000000000000..bf7d817f91d0984870577c61246498cee6f00d78
--- /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 0000000000000000000000000000000000000000..b47f145660cdc931f7baae3a81524e79d10cffe5
--- /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 0000000000000000000000000000000000000000..2d41ee845d69ab230bbeb2868c5fca37b50ac77d
--- /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 0000000000000000000000000000000000000000..358e34bdcdb041faa8355f2b39d377ba2c487479
--- /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 0000000000000000000000000000000000000000..db0c91033b6a62c2cbfeae189c678bacf704390e
--- /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 0000000000000000000000000000000000000000..69d4a9533b913872fa6ce3cdd3cc898ded95ce6e
--- /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 0000000000000000000000000000000000000000..560171fc1b10ed3cb5601688bb61d77e1a9dc8db
--- /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 0000000000000000000000000000000000000000..e467de096e935621970166ff69697c1a2fd146cc
--- /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 0000000000000000000000000000000000000000..b74ea64685e1a25c26ef3a749bd6e6aa4aaf70f1
--- /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 0000000000000000000000000000000000000000..585d2af3824b83d73ba41d34a538febecc324377
--- /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 0000000000000000000000000000000000000000..38115813d35de82204a16853e927610e7ab21ddc
--- /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 0000000000000000000000000000000000000000..c4d87a1c7ccfc156bcd9635cc1bfcea99f6e8f63
--- /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 0000000000000000000000000000000000000000..8461623564ba2dd998d7d6b6f3702daaab52ed60
--- /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 0000000000000000000000000000000000000000..e5ecc423a320fd0613bd36eb3b97147b48119a52
--- /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 0000000000000000000000000000000000000000..4770d7de527a09ad4fb698fdc10ec470b52cb8aa
--- /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 0000000000000000000000000000000000000000..b1bf719757686e5b9b856a969e969a793f1b7a79
--- /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 0000000000000000000000000000000000000000..fff437bc0fa081f385aecdf52505915f99c33526
--- /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 0000000000000000000000000000000000000000..20d8db88f314738a411a0f118be8ede9ee0bec77
--- /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 0000000000000000000000000000000000000000..8b552d6a390d9971307f7834c6ab6d6f6cb95c43
--- /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 0000000000000000000000000000000000000000..1e869edafbba2ffc129fe4abe231d53d5732464e
--- /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 0000000000000000000000000000000000000000..d78a9fcb2ab67efed19987909799b0824a969611
--- /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 0000000000000000000000000000000000000000..fa326eb141600846abd97eb2633e2d0df7d599af
--- /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 0000000000000000000000000000000000000000..5846b293c3ec079851065d5052531e0ebbd590c2
--- /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 0000000000000000000000000000000000000000..6110311fb1ae4ba93acc00974fa4210302e5f75a
--- /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 0000000000000000000000000000000000000000..d5a226797007b6ecc29771b3bc8a55290edb83fa
--- /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 0000000000000000000000000000000000000000..3d12676043b56def6d8f59cf5f8a1a86412155ee
--- /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 0000000000000000000000000000000000000000..8d4b588a85f4884b3da2863cf94574b9286675d8
--- /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 0000000000000000000000000000000000000000..25643615fd9ee15df2ed3e16b18dd5edf66e76c3
--- /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 0000000000000000000000000000000000000000..4ca6891a9cc0779e93924d6bea8a81c68e69f9f0
--- /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 0000000000000000000000000000000000000000..0767088f4057e841b5c3814e7f9cd736f25dfb66
--- /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>
-- 
1.7.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]