User Guide Overview¶
Welcome to the Robo Appian User Guide! This comprehensive guide will help you master automated testing of Appian applications using the Robo Appian library.
What You'll Learn¶
This user guide covers everything you need to know to become proficient with Robo Appian:
🏗️ Core Concepts¶
Understand the fundamental concepts and architecture of Robo Appian, including how it simplifies Appian UI automation.
🎯 Component Mastery¶
Learn to use each component utility effectively, from simple buttons to complex data tables.
🚀 Advanced Techniques¶
Discover powerful features like the ComponentDriver, data-driven testing, and complex workflow automation.
📋 Best Practices¶
Follow industry-proven patterns and practices for maintainable, reliable test automation.
🛠️ Troubleshooting¶
Master error handling, debugging techniques, and common issue resolution.
Guide Structure¶
|
Core Components Detailed guide to all Robo Appian components and their usage
|
Advanced Features ComponentDriver, data-driven testing, and complex workflows
|
Best Practices Industry best practices for test automation
|
Error Handling Master debugging and error resolution techniques
|
Getting the Most from This Guide¶
Prerequisites¶
Before diving into this guide, make sure you have:
- [x] Robo Appian installed - See Installation Guide
- [x] Basic Python knowledge - Understanding of functions, classes, and imports
- [x] Selenium familiarity - Basic understanding of WebDriver concepts
- [x] Access to Appian - An Appian application to test against
Reading Approach¶
This guide is designed to be read in order, but you can also jump to specific sections:
Recommended for beginners
- Start with Core Components
- Progress through Advanced Features
- Study Best Practices
- Reference Error Handling as needed
Good for experienced users
- Use the search function to find specific topics
- Jump directly to component-specific sections
- Reference best practices for specific scenarios
- Consult error handling for troubleshooting
Learning Tips¶
Hands-on Practice
The best way to learn Robo Appian is by practicing. Try the examples in your own Appian environment.
Code Examples
All code examples are tested and ready to use. Copy and adapt them for your specific needs.
Version Compatibility
This guide is for Robo Appian v0.0.12+. Some features may not be available in older versions.
Core Philosophy¶
Understanding Robo Appian's design philosophy will help you use it more effectively:
1. Label-Based Interaction¶
Traditional Selenium:
element = driver.find_element(By.XPATH, "//div[@class='appian-component']//input[@data-field='username']")
element.send_keys("testuser")
Robo Appian approach:
Benefits: - More readable and maintainable - Resilient to UI changes - Business-user friendly
2. Component-Specific Methods¶
Each UI component type has dedicated utilities:
| Component Type | Utility Class | Purpose |
|---|---|---|
| Text Inputs | InputUtils |
Handle text fields, text areas |
| Buttons | ButtonUtils |
Button interactions |
| Dropdowns | DropdownUtils |
Dropdown selections |
| Date Pickers | DateUtils |
Date input handling |
| Tables | TableUtils |
Data table operations |
| Tabs | TabUtils |
Tab navigation |
3. Progressive Complexity¶
Start simple and add complexity as needed:
# Simple: Direct component interaction
ButtonUtils.clickByLabelText(wait, "Submit")
# Advanced: Data-driven with ComponentDriver
ComponentDriver.execute(wait, "Button", "Click", "Submit", None)
# Complex: Custom validation and error handling
try:
ButtonUtils.clickByLabelText(wait, "Submit")
if ComponentUtils.checkComponentExistsByXpath(wait, "//div[@class='success']"):
logger.info("Submission successful")
except Exception as e:
logger.error(f"Submission failed: {e}")
take_screenshot("submission_error")
Common Use Cases¶
1. Form Automation¶
Filling out Appian forms with various field types:
def fill_employee_form(employee_data):
"""Fill out employee form with provided data"""
InputUtils.setValueByLabelText(wait, "First Name", employee_data["first_name"])
InputUtils.setValueByLabelText(wait, "Last Name", employee_data["last_name"])
DateUtils.setValueByLabelText(wait, "Birth Date", employee_data["birth_date"])
DropdownUtils.selectDropdownValueByLabelText(wait, "Department", employee_data["department"])
ButtonUtils.clickByLabelText(wait, "Save Employee")
2. Data Validation¶
Verifying data in tables and forms:
def validate_employee_data(expected_employee):
"""Validate employee appears in the table correctly"""
table = TableUtils.findTableByColumnName(wait, "Employee ID")
row_count = TableUtils.rowCount(table)
for row in range(1, row_count + 1):
emp_id = TableUtils.findComponentFromTableCell(wait, row, "Employee ID").text
if emp_id == expected_employee["id"]:
name = TableUtils.findComponentFromTableCell(wait, row, "Name").text
assert name == expected_employee["name"]
return True
raise AssertionError(f"Employee {expected_employee['id']} not found")
3. Workflow Testing¶
Testing complete business processes:
def test_employee_onboarding_workflow():
"""Test complete employee onboarding process"""
# Login
login_as_hr_manager()
# Create employee
create_new_employee(test_employee_data)
# Assign to department
assign_employee_to_department(test_employee_data["id"], "Engineering")
# Set up benefits
configure_employee_benefits(test_employee_data["id"])
# Verify completion
verify_employee_onboarding_complete(test_employee_data["id"])
Integration Patterns¶
With Testing Frameworks¶
Robo Appian integrates seamlessly with popular testing frameworks:
import pytest
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
@pytest.fixture(scope="session")
def driver():
driver = webdriver.Chrome()
yield driver
driver.quit()
@pytest.fixture
def wait(driver):
return WebDriverWait(driver, 10)
def test_login(driver, wait):
driver.get("https://your-appian-app.com")
InputUtils.setValueByLabelText(wait, "Username", "testuser")
ButtonUtils.clickByLabelText(wait, "Sign In")
import unittest
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
class TestAppianUI(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.wait = WebDriverWait(self.driver, 10)
def tearDown(self):
self.driver.quit()
def test_form_submission(self):
self.driver.get("https://your-appian-app.com")
InputUtils.setValueByLabelText(self.wait, "Name", "Test")
ButtonUtils.clickByLabelText(self.wait, "Submit")
Next Steps¶
Ready to dive deeper? Choose your path:
-
Start with Components
Learn each component utility in detail
:material-arrow-right: Core Components -
Explore Advanced Features
Discover powerful automation patterns
:material-arrow-right: Advanced Features -
See Real Examples
Study complete test examples
:material-arrow-right: Examples -
Get Help
Find answers to common questions
:material-arrow-right: Error Handling
Happy testing with Robo Appian! 🚀