Javascript objects: calling ${object.property} returns undefined

in ExecuteScript_Sandbox command, we define custom javascript objects with properties that we call in our UiVision sequence, for instance:
var testObject = {};
testObject.testdata = “this is test data”;
testObject.testdata2 = “this is another data”;
testObject.testdata3 = “this is another data again”;

return testObject;

then we use these objects in manner
${testObject.testdata}

in latest UiVision release this returns undefined, althoug calling ${testObject} returns all properties values separated with comma:

  • [info] Executing: | echo | ${testObject} | |

  • [echo] this is test data,this is another data,this is another data again

  • [info] Executing: | echo | ${testObject.testdata2} | |

  • [echo] undefined

Tested this and get same outcome in firefox - UI 9.1.9 seems like they are getting turned into an array instead as a workaround you could call the array number ${TESTOBJECT[2]} or use an older version of Ui.V if it was working before. Ill add what code i tested with below.


{
  "Name": "test for",
  "CreationDate": "2024-5-7",
  "Commands": [
    {
      "Command": "comment",
      "Target": "Test 1",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "executeScript_Sandbox",
      "Target": "var testObject = {};\ntestObject.testdata = 'this is test data';\ntestObject.testdata2 = 'this is another data';\ntestObject.testdata3 = 'this is another data again';\nreturn testObject;",
      "Value": "testObject",
      "Description": ""
    },
    {
      "Command": "echo",
      "Target": "${testObject}",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "echo",
      "Target": "${testObject.testdata2}",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "echo",
      "Target": "${TESTOBJECT[2]}",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "Test 2",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "executeScript_Sandbox",
      "Target": "return { name: 'John', age: 30 };",
      "Value": "person",
      "Description": ""
    },
    {
      "Command": "echo",
      "Target": "${person.name}",
      "Value": "",
      "Description": ""
    }
  ]
}

Logs

  • Playing macro test for

  • [info]

Executing: | comment | Test 1 | |

  • [info]

Executing: | executeScript_Sandbox | var testObject = {}; testObject.testdata = ‘this is test data’; testObject.testdata2 = ‘this is another data’; testObject.testdata3 = ‘this is another data again’; return testObject; | testObject |

  • [info]

Executing: | echo | ${testObject} | |

  • [echo]

this is test data,this is another data,this is another data again

  • [info]

Executing: | echo | ${testObject.testdata2} | |

  • [echo]

undefined

  • [info]

Executing: | echo | ${TESTOBJECT[2]} | |

  • [echo]

this is another data again

  • [info]

Executing: | comment | Test 2 | |

  • [info]

Executing: | executeScript_Sandbox | return { name: ‘John’, age: 30 }; | person |

  • [info]

Executing: | echo | ${person.name} | |

  • [echo]

undefined

  • [info]

Macro completed (Runtime 2.84s)

We are looking into it.

hello, any progress while debugging this issue? Unfortunatelly, our automation logic relies significantly on this reported concept and therefore we cannot perform regression/functional tests for our browser-based applications. Thanks in advance…

Hi, the ticket is on our todo list for the next release. So if all goes as planned we will have a fix for this within the next 1-2 weeks.

1 Like