From c9fcb8ecbd9a133bd2ebe0e8b3d0f093dfa28c3e Mon Sep 17 00:00:00 2001 From: Happy Mahlangu Date: Wed, 12 Aug 2026 11:54:17 +0200 Subject: [PATCH 1/3] test(sap): add reversible standard text lifecycle --- .../standard-text/cleanup-standard-text.vbs | 62 ++++++++++++ .../create-revise-delete.flow.yaml | 95 +++++++++++++++++++ examples/sap/standard-text/mint-test-data.ps1 | 3 + examples/sap/standard-text/suite.yaml | 4 + 4 files changed, 164 insertions(+) create mode 100644 examples/sap/standard-text/cleanup-standard-text.vbs create mode 100644 examples/sap/standard-text/create-revise-delete.flow.yaml create mode 100644 examples/sap/standard-text/mint-test-data.ps1 create mode 100644 examples/sap/standard-text/suite.yaml diff --git a/examples/sap/standard-text/cleanup-standard-text.vbs b/examples/sap/standard-text/cleanup-standard-text.vbs new file mode 100644 index 00000000..13fffbbd --- /dev/null +++ b/examples/sap/standard-text/cleanup-standard-text.vbs @@ -0,0 +1,62 @@ +Option Explicit + +Dim shell, name, sapGui, app, connection, session, status +Set shell = CreateObject("WScript.Shell") +name = shell.ExpandEnvironmentStrings("%SO10_TEXT_NAME%") +If name = "%SO10_TEXT_NAME%" Or Left(name, 4) <> "ZFP-" Then + WScript.Echo "cleanup refused unsafe SO10_TEXT_NAME: " & name + WScript.Quit 2 +End If + +Set sapGui = GetObject("SAPGUI") +Set app = sapGui.GetScriptingEngine +Set connection = app.Children(0) +Set session = connection.Children(0) + +If session.Children.Count > 1 Then + On Error Resume Next + If session.FindById("wnd[1]").Text = "Delete Text" Then + session.FindById("wnd[1]/usr/btnSPOP-OPTION1").Press + WScript.Sleep 400 + Else + session.FindById("wnd[1]").SendVKey 12 + WScript.Sleep 200 + End If + On Error GoTo 0 +End If + +session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nSO10" +session.FindById("wnd[0]").SendVKey 0 +WScript.Sleep 400 +session.FindById("wnd[0]/usr/ctxtRSSCE-TDNAME").Text = name +session.FindById("wnd[0]/usr/btn%#AUTOTEXT003").Press +WScript.Sleep 400 +status = session.FindById("wnd[0]/sbar").Text +If Not IsAbsent(status) Then + If InStr(1, session.FindById("wnd[0]").Text, name, vbTextCompare) = 0 Then + WScript.Echo "cleanup could not locate tagged text " & name & ": " & status + WScript.Quit 3 + End If + session.FindById("wnd[0]/mbar/menu[0]/menu[9]").Select + WScript.Sleep 300 + session.FindById("wnd[1]/usr/btnSPOP-OPTION1").Press + WScript.Sleep 500 +End If + +session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nSO10" +session.FindById("wnd[0]").SendVKey 0 +WScript.Sleep 300 +session.FindById("wnd[0]/usr/ctxtRSSCE-TDNAME").Text = name +session.FindById("wnd[0]/usr/btn%#AUTOTEXT002").Press +WScript.Sleep 400 +status = session.FindById("wnd[0]/sbar").Text +If Not IsAbsent(status) Then + WScript.Echo "cleanup verification failed for " & name & ": " & status + WScript.Quit 4 +End If +WScript.Echo "removed SO10 sandbox text " & name + +Function IsAbsent(message) + IsAbsent = InStr(1, message, "not found", vbTextCompare) > 0 Or _ + InStr(1, message, "does not exist", vbTextCompare) > 0 +End Function diff --git a/examples/sap/standard-text/create-revise-delete.flow.yaml b/examples/sap/standard-text/create-revise-delete.flow.yaml new file mode 100644 index 00000000..ce9f8f2c --- /dev/null +++ b/examples/sap/standard-text/create-revise-delete.flow.yaml @@ -0,0 +1,95 @@ +# A long write lifecycle for the reference TS3 sandbox. Unlike a sales order, +# an SO10 standard text can be genuinely deleted. suite.yaml repeats deletion +# unconditionally, so an interrupted or failed run cannot strand test data. +# Cleanup refuses names outside the unique ZFP-* namespace. +name: Create revise and delete standard text +app: sap +steps: + - Go to /nSO10 + - assert: page shows Standard Text: Request + - assert: page shows Text Name + - assert: the wnd[0]/usr/ctxtRSSCE-TDID field contains ST + - assert: the wnd[0]/usr/ctxtRSSCE-TDSPRAS field contains EN + - Type ${SO10_TEXT_NAME} into the "id:wnd[0]/usr/ctxtRSSCE-TDNAME" field + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT001" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: page shows SYSTEM + - Type FLOWPROOF SANDBOX OPERATIONS RUNBOOK into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field + - 'Type Owner: Quality Engineering into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,2]" field' + - 'Type Purpose: deterministic write lifecycle into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3]" field' + - 'Type Scope: TS3 client 100 sandbox into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,4]" field' + - 'Type Phase 1: create the tagged standard text into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,5]" field' + - 'Type Phase 2: verify every persisted line into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,6]" field' + - 'Type Phase 3: revise controlled content into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7]" field' + - 'Type Phase 4: save and reopen the revision into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8]" field' + - 'Type Phase 5: delete the complete object into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9]" field' + - 'Type Control: unique ZFP namespace only into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10]" field' + - 'Type Recovery: suite cleanup is unconditional into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11]" field' + - 'Type Result: no tagged data remains into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12]" field' + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains FLOWPROOF SANDBOX OPERATIONS RUNBOOK + - assert: "the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,2] field contains Owner: Quality Engineering" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains deterministic write lifecycle + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,4] field contains TS3 client 100 sandbox + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,5] field contains create the tagged standard text + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,6] field contains verify every persisted line + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revise controlled content + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains save and reopen the revision + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9] field contains delete the complete object + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10] field contains unique ZFP namespace only + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11] field contains suite cleanup is unconditional + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains no tagged data remains + - Press the "id:wnd[0]/tbar[0]/btn[11]" button + - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + - Press F3 + - assert: page shows Standard Text: Request + - assert: the wnd[0]/usr/ctxtRSSCE-TDNAME field contains ${SO10_TEXT_NAME} + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains FLOWPROOF SANDBOX OPERATIONS RUNBOOK + - assert: "the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,2] field contains Owner: Quality Engineering" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains deterministic write lifecycle + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,4] field contains TS3 client 100 sandbox + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,5] field contains create the tagged standard text + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,6] field contains verify every persisted line + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revise controlled content + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains save and reopen the revision + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9] field contains delete the complete object + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10] field contains unique ZFP namespace only + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11] field contains suite cleanup is unconditional + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains no tagged data remains + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3]" field with Purpose: verified create revise delete lifecycle' + - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7]" field with Phase 3: revision applied and checked' + - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8]" field with Phase 4: persisted revision reopened' + - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12]" field with Result: revision ready for deletion' + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains verified create revise delete lifecycle + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revision applied and checked + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains persisted revision reopened + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains revision ready for deletion + - Press the "id:wnd[0]/tbar[0]/btn[11]" button + - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains FLOWPROOF SANDBOX OPERATIONS RUNBOOK + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains verified create revise delete lifecycle + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revision applied and checked + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains persisted revision reopened + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9] field contains delete the complete object + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10] field contains unique ZFP namespace only + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11] field contains suite cleanup is unconditional + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains revision ready for deletion + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - Click "id:wnd[0]/mbar/menu[0]/menu[9]" + - assert: page shows Delete Text + - Press the "id:wnd[1]/usr/btnSPOP-OPTION1" button + - Go to /nSO10 + - Type ${SO10_TEXT_NAME} into the "id:wnd[0]/usr/ctxtRSSCE-TDNAME" field + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: page shows Text ${SO10_TEXT_NAME} ID ST language EN not found + - Press F3 + - assert: page shows SAP Easy Access diff --git a/examples/sap/standard-text/mint-test-data.ps1 b/examples/sap/standard-text/mint-test-data.ps1 new file mode 100644 index 00000000..b5898de6 --- /dev/null +++ b/examples/sap/standard-text/mint-test-data.ps1 @@ -0,0 +1,3 @@ +$ErrorActionPreference = 'Stop' +$suffix = [DateTime]::UtcNow.ToString('yyMMddHHmmss') + '-' + [Guid]::NewGuid().ToString('N').Substring(0, 6).ToUpperInvariant() +Write-Output "SO10_TEXT_NAME=ZFP-$suffix" diff --git a/examples/sap/standard-text/suite.yaml b/examples/sap/standard-text/suite.yaml new file mode 100644 index 00000000..d5c4b622 --- /dev/null +++ b/examples/sap/standard-text/suite.yaml @@ -0,0 +1,4 @@ +# Each run receives its own customer-namespace SO10 text name. Cleanup runs +# after success, assertion failure, or driver error and proves it is gone. +env_from: powershell.exe -NoProfile -ExecutionPolicy Bypass -File examples/sap/standard-text/mint-test-data.ps1 +after_each: cscript.exe //nologo examples/sap/standard-text/cleanup-standard-text.vbs From 808d12869d18ab99399ef802e6ea24a30cf4c9b1 Mon Sep 17 00:00:00 2001 From: Happy Mahlangu Date: Wed, 12 Aug 2026 16:51:28 +0200 Subject: [PATCH 2/3] fix(sap): keep standard text writes stable --- .../create-revise-delete.flow.yaml | 129 ++++++++++-------- .../create-revise-delete.trace.jsonl | 94 +++++++++++++ 2 files changed, 163 insertions(+), 60 deletions(-) create mode 100644 examples/sap/standard-text/create-revise-delete.trace.jsonl diff --git a/examples/sap/standard-text/create-revise-delete.flow.yaml b/examples/sap/standard-text/create-revise-delete.flow.yaml index ce9f8f2c..178e14c8 100644 --- a/examples/sap/standard-text/create-revise-delete.flow.yaml +++ b/examples/sap/standard-text/create-revise-delete.flow.yaml @@ -1,86 +1,95 @@ -# A long write lifecycle for the reference TS3 sandbox. Unlike a sales order, -# an SO10 standard text can be genuinely deleted. suite.yaml repeats deletion -# unconditionally, so an interrupted or failed run cannot strand test data. -# Cleanup refuses names outside the unique ZFP-* namespace. +# A deliberately long write lifecycle for the reference TS3 sandbox. SO10 +# standard texts can be genuinely deleted, and suite.yaml repeats deletion +# unconditionally if any step fails. +# +# SAP's classic text editor recycles visible row IDs during the pauses needed +# to record actions. The first line is its stable writable unit, so complexity +# comes from five persisted save/display/change cycles rather than scrolling. name: Create revise and delete standard text app: sap steps: - Go to /nSO10 - - assert: page shows Standard Text: Request - - assert: page shows Text Name + - assert: "page shows Standard Text: Request" - assert: the wnd[0]/usr/ctxtRSSCE-TDID field contains ST - assert: the wnd[0]/usr/ctxtRSSCE-TDSPRAS field contains EN - Type ${SO10_TEXT_NAME} into the "id:wnd[0]/usr/ctxtRSSCE-TDNAME" field - Press the "id:wnd[0]/usr/btn%#AUTOTEXT001" button - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" - assert: page shows SYSTEM - - Type FLOWPROOF SANDBOX OPERATIONS RUNBOOK into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field - - 'Type Owner: Quality Engineering into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,2]" field' - - 'Type Purpose: deterministic write lifecycle into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3]" field' - - 'Type Scope: TS3 client 100 sandbox into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,4]" field' - - 'Type Phase 1: create the tagged standard text into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,5]" field' - - 'Type Phase 2: verify every persisted line into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,6]" field' - - 'Type Phase 3: revise controlled content into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7]" field' - - 'Type Phase 4: save and reopen the revision into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8]" field' - - 'Type Phase 5: delete the complete object into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9]" field' - - 'Type Control: unique ZFP namespace only into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10]" field' - - 'Type Recovery: suite cleanup is unconditional into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11]" field' - - 'Type Result: no tagged data remains into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12]" field' - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains FLOWPROOF SANDBOX OPERATIONS RUNBOOK - - assert: "the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,2] field contains Owner: Quality Engineering" - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains deterministic write lifecycle - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,4] field contains TS3 client 100 sandbox - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,5] field contains create the tagged standard text - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,6] field contains verify every persisted line - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revise controlled content - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains save and reopen the revision - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9] field contains delete the complete object - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10] field contains unique ZFP namespace only - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11] field contains suite cleanup is unconditional - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains no tagged data remains + - Type VERSION ONE into the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION ONE - Press the "id:wnd[0]/tbar[0]/btn[11]" button - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + - Press F3 - - assert: page shows Standard Text: Request - - assert: the wnd[0]/usr/ctxtRSSCE-TDNAME field contains ${SO10_TEXT_NAME} + - assert: "page shows Standard Text: Request" - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains FLOWPROOF SANDBOX OPERATIONS RUNBOOK - - assert: "the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,2] field contains Owner: Quality Engineering" - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains deterministic write lifecycle - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,4] field contains TS3 client 100 sandbox - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,5] field contains create the tagged standard text - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,6] field contains verify every persisted line - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revise controlled content - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains save and reopen the revision - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9] field contains delete the complete object - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10] field contains unique ZFP namespace only - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11] field contains suite cleanup is unconditional - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains no tagged data remains + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION ONE - Press F3 - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" - - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3]" field with Purpose: verified create revise delete lifecycle' - - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7]" field with Phase 3: revision applied and checked' - - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8]" field with Phase 4: persisted revision reopened' - - 'Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12]" field with Result: revision ready for deletion' - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains verified create revise delete lifecycle - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revision applied and checked - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains persisted revision reopened - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains revision ready for deletion + - Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field with VERSION TWO + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION TWO - Press the "id:wnd[0]/tbar[0]/btn[11]" button - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + - Press F3 + - assert: "page shows Standard Text: Request" - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains FLOWPROOF SANDBOX OPERATIONS RUNBOOK - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,3] field contains verified create revise delete lifecycle - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,7] field contains revision applied and checked - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,8] field contains persisted revision reopened - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,9] field contains delete the complete object - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,10] field contains unique ZFP namespace only - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,11] field contains suite cleanup is unconditional - - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,12] field contains revision ready for deletion + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION TWO + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field with VERSION THREE + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION THREE + - Press the "id:wnd[0]/tbar[0]/btn[11]" button + - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + + - Press F3 + - assert: "page shows Standard Text: Request" + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION THREE + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field with VERSION FOUR + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FOUR + - Press the "id:wnd[0]/tbar[0]/btn[11]" button + - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + + - Press F3 + - assert: "page shows Standard Text: Request" + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FOUR + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field with VERSION FIVE + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FIVE + - Press the "id:wnd[0]/tbar[0]/btn[11]" button + - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + + - Press F3 + - assert: "page shows Standard Text: Request" + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FIVE + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button + - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" + - Replace the "id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]" field with VERSION SIX + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION SIX + - Press the "id:wnd[0]/tbar[0]/btn[11]" button + - assert: page shows Text ${SO10_TEXT_NAME} language EN was saved + + - Press F3 + - Press the "id:wnd[0]/usr/btn%#AUTOTEXT002" button + - assert: "page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN" + - assert: the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION SIX - Press F3 - Press the "id:wnd[0]/usr/btn%#AUTOTEXT003" button - assert: "page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN" diff --git a/examples/sap/standard-text/create-revise-delete.trace.jsonl b/examples/sap/standard-text/create-revise-delete.trace.jsonl new file mode 100644 index 00000000..d053331f --- /dev/null +++ b/examples/sap/standard-text/create-revise-delete.trace.jsonl @@ -0,0 +1,94 @@ +{"format":"flowproof-trace","version":1,"trace_id":"a916200b-58f2-41ec-8073-3418b87a64bd","recorded_at":"2026-08-12T14:29:30Z","spec":{"name":"Create revise and delete standard text"},"app":{"name":"sap","adapter":"sap-com","window_title":"SAP"},"env":{"os":"windows","resolution":[1920,1080]},"recording":{"format":"filmstrip/1","dir":".flowproof/recordings/a916200b-58f2-41ec-8073-3418b87a64bd/recording"}} +{"id":"s0001","intent":"Go to /nSO10","action":{"type":"launch","params":{"url":"/nSO10"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":0,"end_ms":9735}}} +{"id":"s0002","intent":"page shows Standard Text: Request","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Standard Text: Request"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":9737,"end_ms":19978}}} +{"id":"s0003","intent":"the wnd[0]/usr/ctxtRSSCE-TDID field contains ST","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"ST"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/ctxtRSSCE-TDID"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":19979,"end_ms":28693}}} +{"id":"s0004","intent":"the wnd[0]/usr/ctxtRSSCE-TDSPRAS field contains EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"EN"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/ctxtRSSCE-TDSPRAS"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":28694,"end_ms":37547}}} +{"id":"s0005","intent":"Type ${SO10_TEXT_NAME} into the \"id:wnd[0]/usr/ctxtRSSCE-TDNAME\" field","action":{"type":"type_text","params":{"text":"${SO10_TEXT_NAME}"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/ctxtRSSCE-TDNAME"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":37547,"end_ms":46874}}} +{"id":"s0006","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT001\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT001"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":46874,"end_ms":59036}}} +{"id":"s0007","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":59037,"end_ms":74261}}} +{"id":"s0008","intent":"page shows SYSTEM","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"SYSTEM"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":74262,"end_ms":87960}}} +{"id":"s0009","intent":"Type VERSION ONE into the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field","action":{"type":"type_text","params":{"text":"VERSION ONE"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":87960,"end_ms":99453}}} +{"id":"s0010","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION ONE","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION ONE"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":99453,"end_ms":111139}}} +{"id":"s0011","intent":"Press the \"id:wnd[0]/tbar[0]/btn[11]\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/tbar[0]/btn[11]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":111139,"end_ms":122582}}} +{"id":"s0012","intent":"page shows Text ${SO10_TEXT_NAME} language EN was saved","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} language EN was saved"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":122583,"end_ms":136212}}} +{"id":"s0013","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":136212,"end_ms":146466}}} +{"id":"s0014","intent":"page shows Standard Text: Request","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Standard Text: Request"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":146466,"end_ms":155971}}} +{"id":"s0015","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":155971,"end_ms":166785}}} +{"id":"s0016","intent":"page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Display Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":166785,"end_ms":177407}}} +{"id":"s0017","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION ONE","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION ONE"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":177408,"end_ms":186627}}} +{"id":"s0018","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":186628,"end_ms":196045}}} +{"id":"s0019","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT003\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT003"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":196045,"end_ms":208866}}} +{"id":"s0020","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":208866,"end_ms":223189}}} +{"id":"s0021","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION TWO","action":{"type":"type_text","params":{"text":"","replace":true}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":223191,"end_ms":235147}}} +{"id":"s0022","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION TWO","action":{"type":"type_text","params":{"text":"VERSION TWO"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":235148,"end_ms":247114}}} +{"id":"s0023","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION TWO","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION TWO"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":247115,"end_ms":258779}}} +{"id":"s0024","intent":"Press the \"id:wnd[0]/tbar[0]/btn[11]\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/tbar[0]/btn[11]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":258779,"end_ms":270720}}} +{"id":"s0025","intent":"page shows Text ${SO10_TEXT_NAME} language EN was saved","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} language EN was saved"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":270720,"end_ms":288141}}} +{"id":"s0026","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":288141,"end_ms":299867}}} +{"id":"s0027","intent":"page shows Standard Text: Request","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Standard Text: Request"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":299868,"end_ms":310073}}} +{"id":"s0028","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":310074,"end_ms":321049}}} +{"id":"s0029","intent":"page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Display Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":321049,"end_ms":331307}}} +{"id":"s0030","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION TWO","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION TWO"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":331308,"end_ms":340545}}} +{"id":"s0031","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":340545,"end_ms":356569}}} +{"id":"s0032","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT003\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT003"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":356572,"end_ms":385301}}} +{"id":"s0033","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":385302,"end_ms":412798}}} +{"id":"s0034","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION THREE","action":{"type":"type_text","params":{"text":"","replace":true}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":412799,"end_ms":438408}}} +{"id":"s0035","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION THREE","action":{"type":"type_text","params":{"text":"VERSION THREE"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":438409,"end_ms":459182}}} +{"id":"s0036","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION THREE","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION THREE"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":459184,"end_ms":478033}}} +{"id":"s0037","intent":"Press the \"id:wnd[0]/tbar[0]/btn[11]\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/tbar[0]/btn[11]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":478034,"end_ms":494153}}} +{"id":"s0038","intent":"page shows Text ${SO10_TEXT_NAME} language EN was saved","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} language EN was saved"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":494154,"end_ms":516240}}} +{"id":"s0039","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":516244,"end_ms":533624}}} +{"id":"s0040","intent":"page shows Standard Text: Request","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Standard Text: Request"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":533625,"end_ms":547189}}} +{"id":"s0041","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":547189,"end_ms":565929}}} +{"id":"s0042","intent":"page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Display Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":565930,"end_ms":587815}}} +{"id":"s0043","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION THREE","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION THREE"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":587815,"end_ms":623890}}} +{"id":"s0044","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":623942,"end_ms":666893}}} +{"id":"s0045","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT003\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT003"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":666894,"end_ms":688559}}} +{"id":"s0046","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":688560,"end_ms":724359}}} +{"id":"s0047","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION FOUR","action":{"type":"type_text","params":{"text":"","replace":true}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":724361,"end_ms":751848}}} +{"id":"s0048","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION FOUR","action":{"type":"type_text","params":{"text":"VERSION FOUR"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":751849,"end_ms":773807}}} +{"id":"s0049","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FOUR","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION FOUR"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":773808,"end_ms":808870}}} +{"id":"s0050","intent":"Press the \"id:wnd[0]/tbar[0]/btn[11]\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/tbar[0]/btn[11]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":808870,"end_ms":822745}}} +{"id":"s0051","intent":"page shows Text ${SO10_TEXT_NAME} language EN was saved","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} language EN was saved"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":822745,"end_ms":837052}}} +{"id":"s0052","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":837053,"end_ms":848632}}} +{"id":"s0053","intent":"page shows Standard Text: Request","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Standard Text: Request"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":848633,"end_ms":858779}}} +{"id":"s0054","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":858779,"end_ms":871841}}} +{"id":"s0055","intent":"page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Display Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":871845,"end_ms":883471}}} +{"id":"s0056","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FOUR","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION FOUR"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":883471,"end_ms":892916}}} +{"id":"s0057","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":892916,"end_ms":902106}}} +{"id":"s0058","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT003\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT003"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":902107,"end_ms":914636}}} +{"id":"s0059","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":914636,"end_ms":929466}}} +{"id":"s0060","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION FIVE","action":{"type":"type_text","params":{"text":"","replace":true}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":929466,"end_ms":945213}}} +{"id":"s0061","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION FIVE","action":{"type":"type_text","params":{"text":"VERSION FIVE"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":945217,"end_ms":957371}}} +{"id":"s0062","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FIVE","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION FIVE"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":957372,"end_ms":969827}}} +{"id":"s0063","intent":"Press the \"id:wnd[0]/tbar[0]/btn[11]\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/tbar[0]/btn[11]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":969827,"end_ms":982869}}} +{"id":"s0064","intent":"page shows Text ${SO10_TEXT_NAME} language EN was saved","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} language EN was saved"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":982869,"end_ms":999135}}} +{"id":"s0065","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":999138,"end_ms":1009800}}} +{"id":"s0066","intent":"page shows Standard Text: Request","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Standard Text: Request"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1009800,"end_ms":1021198}}} +{"id":"s0067","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1021202,"end_ms":1033140}}} +{"id":"s0068","intent":"page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Display Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1033140,"end_ms":1043677}}} +{"id":"s0069","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION FIVE","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION FIVE"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1043678,"end_ms":1052956}}} +{"id":"s0070","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1052957,"end_ms":1063485}}} +{"id":"s0071","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT003\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT003"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1063485,"end_ms":1076727}}} +{"id":"s0072","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1076728,"end_ms":1093033}}} +{"id":"s0073","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION SIX","action":{"type":"type_text","params":{"text":"","replace":true}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1093034,"end_ms":1105293}}} +{"id":"s0074","intent":"Replace the \"id:wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]\" field with VERSION SIX","action":{"type":"type_text","params":{"text":"VERSION SIX"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1105293,"end_ms":1118627}}} +{"id":"s0075","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION SIX","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION SIX"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1118628,"end_ms":1131792}}} +{"id":"s0076","intent":"Press the \"id:wnd[0]/tbar[0]/btn[11]\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/tbar[0]/btn[11]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1131840,"end_ms":1145268}}} +{"id":"s0077","intent":"page shows Text ${SO10_TEXT_NAME} language EN was saved","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} language EN was saved"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1145270,"end_ms":1160183}}} +{"id":"s0078","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1160184,"end_ms":1171068}}} +{"id":"s0079","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1171069,"end_ms":1182921}}} +{"id":"s0080","intent":"page shows Display Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Display Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1182924,"end_ms":1194380}}} +{"id":"s0081","intent":"the wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1] field contains VERSION SIX","action":{"type":"assert","params":{"kind":"element_state","expect":{"timeout_ms":10000,"value_contains":"VERSION SIX"},"selector_ref":0}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/tblSAPLSTXXEDITAREA/txtRSTXT-TXLINE[2,1]"}}],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1194380,"end_ms":1203904}}} +{"id":"s0082","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1203905,"end_ms":1213511}}} +{"id":"s0083","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT003\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT003"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1213512,"end_ms":1231164}}} +{"id":"s0084","intent":"page shows Change Standard Text: ${SO10_TEXT_NAME} Language EN","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Change Standard Text: ${SO10_TEXT_NAME} Language EN"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1231165,"end_ms":1246120}}} +{"id":"s0085","intent":"Click \"id:wnd[0]/mbar/menu[0]/menu[9]\"","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/mbar/menu[0]/menu[9]"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1246134,"end_ms":1258959}}} +{"id":"s0086","intent":"page shows Delete Text","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Delete Text"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1258959,"end_ms":1274328}}} +{"id":"s0087","intent":"Press the \"id:wnd[1]/usr/btnSPOP-OPTION1\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[1]/usr/btnSPOP-OPTION1"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1274329,"end_ms":1288270}}} +{"id":"s0088","intent":"Go to /nSO10","action":{"type":"launch","params":{"url":"/nSO10"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1288271,"end_ms":1300746}}} +{"id":"s0089","intent":"Type ${SO10_TEXT_NAME} into the \"id:wnd[0]/usr/ctxtRSSCE-TDNAME\" field","action":{"type":"type_text","params":{"text":"${SO10_TEXT_NAME}"}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/ctxtRSSCE-TDNAME"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1300747,"end_ms":1310172}}} +{"id":"s0090","intent":"Press the \"id:wnd[0]/usr/btn%#AUTOTEXT002\" button","action":{"type":"click","params":{}},"selectors":[{"tier":"native_id","provenance":"sap-com","confidence":1.0,"payload":{"id":"wnd[0]/usr/btn%#AUTOTEXT002"}}],"sync":{"pre":[{"kind":"element_exists","timeout_ms":5000}],"post":[]},"artifacts":{"recording":{"start_ms":1310172,"end_ms":1320505}}} +{"id":"s0091","intent":"page shows Text ${SO10_TEXT_NAME} ID ST language EN not found","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"Text ${SO10_TEXT_NAME} ID ST language EN not found"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1320506,"end_ms":1330457}}} +{"id":"s0092","intent":"Press F3","action":{"type":"press_key","params":{"key":"F3"}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1330457,"end_ms":1340349}}} +{"id":"s0093","intent":"page shows SAP Easy Access","action":{"type":"assert","params":{"kind":"element_state","expect":{"scope":"surface","timeout_ms":10000,"value_contains":"SAP Easy Access"}}},"selectors":[],"sync":{"pre":[],"post":[]},"artifacts":{"recording":{"start_ms":1340350,"end_ms":1351119}}} From b0bc90d8f7147a13b9954c54131653cefce65b08 Mon Sep 17 00:00:00 2001 From: Happy Mahlangu Date: Wed, 12 Aug 2026 17:10:25 +0200 Subject: [PATCH 3/3] fix(sap): keep example artifact-only --- .../standard-text/cleanup-standard-text.vbs | 62 ------------------- .../create-revise-delete.flow.yaml | 4 +- examples/sap/standard-text/mint-test-data.ps1 | 3 - examples/sap/standard-text/suite.yaml | 4 -- 4 files changed, 2 insertions(+), 71 deletions(-) delete mode 100644 examples/sap/standard-text/cleanup-standard-text.vbs delete mode 100644 examples/sap/standard-text/mint-test-data.ps1 delete mode 100644 examples/sap/standard-text/suite.yaml diff --git a/examples/sap/standard-text/cleanup-standard-text.vbs b/examples/sap/standard-text/cleanup-standard-text.vbs deleted file mode 100644 index 13fffbbd..00000000 --- a/examples/sap/standard-text/cleanup-standard-text.vbs +++ /dev/null @@ -1,62 +0,0 @@ -Option Explicit - -Dim shell, name, sapGui, app, connection, session, status -Set shell = CreateObject("WScript.Shell") -name = shell.ExpandEnvironmentStrings("%SO10_TEXT_NAME%") -If name = "%SO10_TEXT_NAME%" Or Left(name, 4) <> "ZFP-" Then - WScript.Echo "cleanup refused unsafe SO10_TEXT_NAME: " & name - WScript.Quit 2 -End If - -Set sapGui = GetObject("SAPGUI") -Set app = sapGui.GetScriptingEngine -Set connection = app.Children(0) -Set session = connection.Children(0) - -If session.Children.Count > 1 Then - On Error Resume Next - If session.FindById("wnd[1]").Text = "Delete Text" Then - session.FindById("wnd[1]/usr/btnSPOP-OPTION1").Press - WScript.Sleep 400 - Else - session.FindById("wnd[1]").SendVKey 12 - WScript.Sleep 200 - End If - On Error GoTo 0 -End If - -session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nSO10" -session.FindById("wnd[0]").SendVKey 0 -WScript.Sleep 400 -session.FindById("wnd[0]/usr/ctxtRSSCE-TDNAME").Text = name -session.FindById("wnd[0]/usr/btn%#AUTOTEXT003").Press -WScript.Sleep 400 -status = session.FindById("wnd[0]/sbar").Text -If Not IsAbsent(status) Then - If InStr(1, session.FindById("wnd[0]").Text, name, vbTextCompare) = 0 Then - WScript.Echo "cleanup could not locate tagged text " & name & ": " & status - WScript.Quit 3 - End If - session.FindById("wnd[0]/mbar/menu[0]/menu[9]").Select - WScript.Sleep 300 - session.FindById("wnd[1]/usr/btnSPOP-OPTION1").Press - WScript.Sleep 500 -End If - -session.FindById("wnd[0]/tbar[0]/okcd").Text = "/nSO10" -session.FindById("wnd[0]").SendVKey 0 -WScript.Sleep 300 -session.FindById("wnd[0]/usr/ctxtRSSCE-TDNAME").Text = name -session.FindById("wnd[0]/usr/btn%#AUTOTEXT002").Press -WScript.Sleep 400 -status = session.FindById("wnd[0]/sbar").Text -If Not IsAbsent(status) Then - WScript.Echo "cleanup verification failed for " & name & ": " & status - WScript.Quit 4 -End If -WScript.Echo "removed SO10 sandbox text " & name - -Function IsAbsent(message) - IsAbsent = InStr(1, message, "not found", vbTextCompare) > 0 Or _ - InStr(1, message, "does not exist", vbTextCompare) > 0 -End Function diff --git a/examples/sap/standard-text/create-revise-delete.flow.yaml b/examples/sap/standard-text/create-revise-delete.flow.yaml index 178e14c8..f673c75e 100644 --- a/examples/sap/standard-text/create-revise-delete.flow.yaml +++ b/examples/sap/standard-text/create-revise-delete.flow.yaml @@ -1,6 +1,6 @@ # A deliberately long write lifecycle for the reference TS3 sandbox. SO10 -# standard texts can be genuinely deleted, and suite.yaml repeats deletion -# unconditionally if any step fails. +# standard texts can be genuinely deleted, so the flow cleans up the record it +# creates and verifies that it no longer exists. # # SAP's classic text editor recycles visible row IDs during the pauses needed # to record actions. The first line is its stable writable unit, so complexity diff --git a/examples/sap/standard-text/mint-test-data.ps1 b/examples/sap/standard-text/mint-test-data.ps1 deleted file mode 100644 index b5898de6..00000000 --- a/examples/sap/standard-text/mint-test-data.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -$ErrorActionPreference = 'Stop' -$suffix = [DateTime]::UtcNow.ToString('yyMMddHHmmss') + '-' + [Guid]::NewGuid().ToString('N').Substring(0, 6).ToUpperInvariant() -Write-Output "SO10_TEXT_NAME=ZFP-$suffix" diff --git a/examples/sap/standard-text/suite.yaml b/examples/sap/standard-text/suite.yaml deleted file mode 100644 index d5c4b622..00000000 --- a/examples/sap/standard-text/suite.yaml +++ /dev/null @@ -1,4 +0,0 @@ -# Each run receives its own customer-namespace SO10 text name. Cleanup runs -# after success, assertion failure, or driver error and proves it is gone. -env_from: powershell.exe -NoProfile -ExecutionPolicy Bypass -File examples/sap/standard-text/mint-test-data.ps1 -after_each: cscript.exe //nologo examples/sap/standard-text/cleanup-standard-text.vbs