Hi Community,
I’m currently exploring how to implement automated UI testing for applications built on OutSystems Developer Cloud (ODC), and I would like to understand the recommended approach followed by the community.
My Current Understanding
From what I understand, OutSystems can support testing for areas such as: Actions Services APIs Business logic Component-level testing. However, for browser-based UI testing, it seems that testing directly inside OutSystems may not be possible. Instead, we may need to use external UI automation tools such as: Selenium IDE Selenium WebDriver Playwright Cypress Other browser automation tools
My Proposed Testing Strategy
I am thinking of using a layered testing approach:
Layer 1 – Component / API / Business Logic Testing We have built an OutSystems application to handle API testing, action testing, and business logic validation.
Layer 2 – UI Smoke Testing For UI testing, I am considering using an external UI automation tool. One possible idea is:
My Questions
Additional Context
I am primarily an OutSystems developer and currently have limited/no experience with automation testing or UI automation tools. So, I would appreciate guidance from a beginner-friendly perspective
Thanks in advance.
You’re on the right track conceptually, and your questions are very aligned with how OutSystems recommends testing ODC applications.
I’ll break this down into:
For ODC, OutSystems’ own guidance is:
The “testing pyramid” for ODC explicitly says:
So your idea of:
is fully aligned with recommended practice.
Yes. The recommended approach is:
For external REST or service actions:
So your Layer 1 is absolutely correct.
Your idea:
User clicks a button in an OutSystems testing app → calls an API → API triggers Selenium/Playwright/etc. → tool runs tests → result sent back to OutSystems and displayed
This is technically feasible and conceptually sound:
So the idea of:
is a good architectural direction.
From a maturity perspective:
So: Yes, your strategy is correct for ODC; just keep in mind that wiring a “Run” button from OutSystems to the automation infrastructure is optional and usually comes after the core automation is solid.
Since your client already has tools for UI testing on other platforms, you should clarify the following:
Ask:
OutSystems guidance is tool-agnostic: the frameworks and patterns (Page Object, Keyword-Driven, BDD) work with any of these. How Can We Accelerate Automation Tests Using the OutSystems Standards – Automation Tools and Framework Agnosticism
How are tests currently executed?
What browsers/devices are covered?
Clarify roles:
This impacts how much locator strategy and OutSystems-specific patterns you will need to teach them.
To support the flow “OutSystems button → external tests → return results”, you need:
Test runner endpoint:
Execution environment / server:
Authentication & security:
You don’t need to manage drivers yourself inside OutSystems; you just need to know that the test runner environment is properly configured.
In the other direction, you must provide clear, stable locators and test data:
Application URLs & environments:
Locator strategy:
OutSystems generates dynamic IDs, but:
BTN_Search
Input_Username
Best practices:
Common patterns / reusable flows:
Test data strategy:
Given you’re mainly an OutSystems dev and new to UI automation, here’s a simple, robust architecture to adopt.
Layer A – Unit / Component / API tests (inside OutSystems)
Create one or more test applications in ODC:
Co-locate test screens/actions within or next to the app code, secured by tokens, so they can run in pipeline but are not public. High Performance Continuous Delivery with ODC – Testing Strategy – Test Automation and BDD Framework Integration
Focus here first; this will give you stable, fast feedback.
Layer B – UI smoke/regression tests (outside OutSystems)
Use the client’s existing tool (e.g., Selenium, Playwright, Cypress, Katalon, Tosca).
Implement:
BTN_Login
Link_CustomerDetails
Ensure scripts have:
Option 1 (simpler, common): CI tool triggers tests
Use Jenkins or similar CI to:
Results:
OutSystems case studies show Jenkins being used for scheduled automated tests (e.g., nightly runs) without initially going all the way to test-trigger buttons in the app. How Automation Tests Save You During a Refactoring Process – Test Process Integration – Continuous Testing and Defect Management
Option 2 (your idea): OutSystems app triggers the CI / automation server
Create a small “Test Orchestrator” app in ODC with:
The screen’s action:
Store results in an OutSystems entity:
This is not required but is a nice integration once your basics are working.
Given your experience level:
Start with Layer 1 (inside OutSystems):
Pick one UI automation tool (ideally the one the client already uses):
Establish naming conventions in Service Studio:
BTN_
LINK_
INPUT_
Implement a handful of smoke tests:
Only after that, add orchestration (CI integration or OutSystems “Run tests” buttons).
Q1. Is this overall testing strategy correct for ODC applications?
Yes:
Layer 1 (Component/API/Business logic) tested inside OutSystems (BDD, test applications) is exactly aligned with ODC’s recommended testing pyramid. High Performance Continuous Delivery with ODC – Testing Strategy – Test Automation and BDD Framework Integration
Layer 2 (UI smoke tests) via external tools like Selenium/Playwright/Cypress is the correct way to handle browser-based UI testing. OutSystems itself is not the right tool for UI automation. How Can We Accelerate Automation Tests Using the OutSystems Standards – Automation with OutSystems Platform
Your idea of triggering tests via APIs and feeding results back into an OutSystems app is valid and commonly used in more mature setups.
Q2. If this approach is correct, what are the prerequisites required from the UI automation side?
You should at least gather:
And you provide:
Q3. If this is not recommended, what’s the best architecture?
Your strategy is recommended — you just want to:
If you’d like, I can suggest a concrete first test suite (e.g., 5–10 smoke tests for your app) and how to split responsibilities between OutSystems and the external tool.