- Introduction
- Getting Started with UiPath Agents
- Getting Started with UiPath Agents using LangGraph
- Building a Low-Code Agent in Studio Web
- Adding Tools to Your UiPath Agent
- Getting Started with UiPath Maestro Flow
Test the Price Watch Flow using Debug to upload and run it in your UiPath Cloud account as a debug session to check the outputs.
We will test our Flow by executing it twice to test each of the branches based on the current exchange rate. A Debug run executes the flow the same way it would if we had published and deployed it. The HTTP Request node calls Frankfurter, the Script node runs the JavaScript, and the Decision node takes one of its two paths. Debug runs execute server-side in the tenant you are signed in to, and they execute in the cloud rather than on your machine.
A debug run is a real run. The API call happens, and any side effects a flow has are real side effects. Frankfurter is a read-only public service, so a Price Watch run doesn't incur any costs from the Frankfurter API call, but treat a debug run as production traffic once a flow writes to a system.
Step 4 - Testing the flow
There are two ways you can test the Flow - using the Debug button in VS Code (Step 4.1), or using CLI commands (Steps 4.2 and 4.3). You can pick either option, or both, depending on your preference.
4.1 - Using VS Code to test the Flow
-
Select Debug in the canvas toolbar (the play button - ▶️).
-
Supply values for the three trigger inputs when prompted - the defaults we set earlier should be set for each one:
-
Watch the execution panel at the bottom of the editor as the trace populates, node by node.
Each node shows a success or failure indicator when the run finishes. Here is what the successful execution should look like when the endAlert1 node was the end node:
Follow the same steps to test the endNoAction1 node, changing the alertThreshold to a value below the current rate (this will vary over time). This is what a successful run will look like when 0.1 is used to confirm the "No action" branch:
4.2 - Using the CLI to test the Flow (Alert)
To do a Debug run from terminal with the uip command, use the following from the solution's top-level directory, not the PriceWatch directory:
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output table \
--output-filter 'elementExecutions'
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output table \
--output-filter 'elementExecutions'
The response should end with "Debug completed with status: Completed" and carries an instance ID for correlating logs and traces.
With the values above, the USD to EUR rate was 0.86111 at the time of writing, which is below 0.9, so the Decision node takes the Alert path and the run ends at endAlert1. In the response below, the Data.elementExecutions contains this info, and we only show it by adding --output-filter 'elementExecutions' to the command:
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T14:45:11.1800316Z | 2026-09-09T14:45:11.5424344Z
fetchRate1 | SubProcess | Completed | 2026-09-09T14:45:12.0084766Z | 2026-09-09T14:45:15.4191562Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T14:45:12.5480076Z | 2026-09-09T14:45:12.811941Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T14:45:13.1623209Z | 2026-09-09T14:45:14.0727369Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T14:45:14.6862017Z | 2026-09-09T14:45:14.9360746Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T14:45:15.6366731Z | 2026-09-09T14:45:15.973426Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T14:45:16.3758949Z | 2026-09-09T14:45:16.4578181Z
endAlert1 | EndEvent | Completed | 2026-09-09T14:45:16.7053678Z | 2026-09-09T14:45:17.0385488Z
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T14:45:11.1800316Z | 2026-09-09T14:45:11.5424344Z
fetchRate1 | SubProcess | Completed | 2026-09-09T14:45:12.0084766Z | 2026-09-09T14:45:15.4191562Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T14:45:12.5480076Z | 2026-09-09T14:45:12.811941Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T14:45:13.1623209Z | 2026-09-09T14:45:14.0727369Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T14:45:14.6862017Z | 2026-09-09T14:45:14.9360746Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T14:45:15.6366731Z | 2026-09-09T14:45:15.973426Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T14:45:16.3758949Z | 2026-09-09T14:45:16.4578181Z
endAlert1 | EndEvent | Completed | 2026-09-09T14:45:16.7053678Z | 2026-09-09T14:45:17.0385488Z
Only one End node appears, which is how you confirm which branch was executed. The nested _Implicit_* entries under fetchRate1 are the managed HTTP node expanding into a subprocess.
To look at what each global variable (in Data.variables.globals) held when the run finished, run it again without the --output table option to show the full JSON output:
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output-filter 'variables.globals'
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.9}' \
--output-filter 'variables.globals'
Look for these sections in the returned JSON, specifically the line with "belowThreshold": true:
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
That block is the fastest check that both the Script node and the End node mapping are right.
The --output-filter 'elementExecutions' and --output-filter 'variables.globals' is included in the commands above to only return the part of the response we are interested in - if you omit it, you will see the full JSON response with all the details. The --output table parameter is used in the first command to also format the JSON output into an easily readable text table. It is not used on the second command due to the nested JSON fields, it would be hard to read - try it yourself by adding in --output table.
4.3 - Using the CLI to test the Flow (No Action)
Rates move, so your numbers will differ from the ones in this tutorial. To take the false path deliberately, run again with alertThreshold set to 0.1: the rate is then above the threshold, belowThreshold is false, and the run ends at endNoAction1.
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}' \
--output table \
--output-filter 'elementExecutions'
uip maestro flow debug PriceWatch \
--inputs '{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}' \
--output table \
--output-filter 'elementExecutions'
Looking at the output below, on the last line, you can see that endNoAction1 was executed instead of endAlert:
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T19:35:16.9481084Z | 2026-09-09T19:35:17.8183474Z
fetchRate1 | SubProcess | Completed | 2026-09-09T19:35:18.2733427Z | 2026-09-09T19:35:23.0056514Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T19:35:19.2552152Z | 2026-09-09T19:35:19.6644838Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T19:35:20.0168686Z | 2026-09-09T19:35:21.5714821Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T19:35:21.8821048Z | 2026-09-09T19:35:22.2081364Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T19:35:23.7685642Z | 2026-09-09T19:35:24.3541723Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T19:35:24.6927348Z | 2026-09-09T19:35:24.8111957Z
endNoAction1 | EndEvent | Completed | 2026-09-09T19:35:25.393084Z | 2026-09-09T19:35:26.086936Z
elementId | elementType | status | startedAt | completedAt
--------------------------------------|------------------|-----------|------------------------------|-----------------------------
start | StartEvent | Completed | 2026-09-09T19:35:16.9481084Z | 2026-09-09T19:35:17.8183474Z
fetchRate1 | SubProcess | Completed | 2026-09-09T19:35:18.2733427Z | 2026-09-09T19:35:23.0056514Z
_Implicit_StartEvent_fetchRate1 | StartEvent | Completed | 2026-09-09T19:35:19.2552152Z | 2026-09-09T19:35:19.6644838Z
_Implicit_HttpTask_fetchRate1 | SendTask | Completed | 2026-09-09T19:35:20.0168686Z | 2026-09-09T19:35:21.5714821Z
_Implicit_EndEvent_Default_fetchRate1 | EndEvent | Completed | 2026-09-09T19:35:21.8821048Z | 2026-09-09T19:35:22.2081364Z
reshapeRate1 | ScriptTask | Completed | 2026-09-09T19:35:23.7685642Z | 2026-09-09T19:35:24.3541723Z
belowThreshold1 | InclusiveGateway | Completed | 2026-09-09T19:35:24.6927348Z | 2026-09-09T19:35:24.8111957Z
endNoAction1 | EndEvent | Completed | 2026-09-09T19:35:25.393084Z | 2026-09-09T19:35:26.086936Z
Run the following command to retrieve the values set for variables.globals:
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}'
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "EUR", "alertThreshold": 0.1}'
Look for these sections in the returned JSON, specifically the line with "belowThreshold": false:
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.1,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
}
}
{
"reshapeRate1.output": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "EUR",
"start.output.alertThreshold": 0.1,
"watchResult": {
"pair": "USD/EUR",
"rate": 0.85946,
"asOf": "2026-09-10",
"belowThreshold": false
}
}
Running both paths once is the fastest way to confirm the Decision node is wired correctly on both branches. Confirm the second run ends at endNoAction1 and that watchResult comes back with belowThreshold set to false.
Try a third run with a different quote currency, such as "quoteCurrency": "GBP", to confirm the Script node's lookup is not quietly tied to EUR. The pair and rate in watchResult should follow the currency you asked for.
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "GBP", "alertThreshold": 0.9}'
uip maestro flow debug PriceWatch --output-filter 'variables.globals' --inputs \
'{"baseCurrency": "USD", "quoteCurrency": "GBP", "alertThreshold": 0.9}'
{
"reshapeRate1.output": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "GBP",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
{
"reshapeRate1.output": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
},
"start.output.baseCurrency": "USD",
"start.output.quoteCurrency": "GBP",
"start.output.alertThreshold": 0.9,
"watchResult": {
"pair": "USD/GBP",
"rate": 0.73782,
"asOf": "2026-09-10",
"belowThreshold": true
}
}
Now that we have confirmed it is working as expected, it is time to Deploy the Flow in your UiPath Cloud account's tenant.