Lost background heartbeat

Hello everyone,

I am using UI vision to fill a dynamic page without ever reloading it.
I get my data from a CSV.
After a few executions i get an error “lost background heartbeat”, usually after a type command of a long string (about 50 chars).
I am willing to give my script in private, but it is a bit complex and the website it uses is requiers an account but you might be able to create one.

The issue is systematic now, even running the script on a dedicated machine. I loose literal days a month without this script. I would really apreciate if you could take a look.

Thank you

Hello, do you use V8.01? And do you have the XModules installed?

After a few executions

After roughly how many runs?

I am using the 6.2.6 (version in the firefox extensions manager)
Xmodules installed and updated
It depends, between 20 to 40 I would say

I made a test macro.
You must have an account on this website : Log in
It can be created for free.
EDIT : after checking, the account can be created but you probably will not be able to have everyting you need to run the test case.
Let me know if you need anything else

1 - Log in
2 - Start the test case

The execution is going to slow down on each iteration when filling the “Signe distinctif text box” (step 33) until it looses the baground heartbeat on the type command after managing to write the text.
Happend for me on execution number 38

{
  "Name": "TestMacroTrace",
  "CreationDate": "2022-9-5",
  "Commands": [
    {
      "Command": "store",
      "Target": "nodisplay",
      "Value": "!replayspeed",
      "Description": ""
    },
    {
      "Command": "store",
      "Target": "10",
      "Value": "!timeout_wait",
      "Description": ""
    },
    {
      "Command": "open",
      "Target": "https://webgate.ec.europa.eu/tracesnt/certificate/phyto/search",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"content\"]/section/div/div/div[2]/button",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"content\"]/section/div/div/div[2]/button",
        "xpath=//div/div/div[2]/button",
        "css=#content > section > div.topBar.affix-top > div.pull-right > div:nth-child(2) > button"
      ],
      "Description": ""
    },
    {
      "Command": "clickAndWait",
      "Target": "linkText=Nouveau certificat",
      "Value": "",
      "Targets": [
        "linkText=Nouveau certificat",
        "xpath=//*[@id=\"content\"]/section/div/div/div[2]/ul/li/a",
        "xpath=//div/div/div[2]/ul/li/a",
        "css=#content > section > div.topBar.affix-top > div.pull-right > div.btn-group.open > ul > li:nth-child(1) > a"
      ],
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "Select EPPO code",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/div/span/i",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/div/span/i",
        "xpath=//li[6]/classification-tree-node/div/div/span/i",
        "css=#classificationNodes > li:nth-child(6) > classification-tree-node > div > div > span > i.glyphicon.glyphicon-plus.text-muted"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/div/span/i",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/div/span/i",
        "xpath=//classification-tree-node/div/ul/li/classification-tree-node/div/div/span/i",
        "css=#classificationNodes > li:nth-child(6) > classification-tree-node > div > ul > li:nth-child(1) > classification-tree-node > div > div > span > i.glyphicon.glyphicon-plus.text-muted"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/ul/li[2]/classification-tree-node/div/div/span/i",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/ul/li[2]/classification-tree-node/div/div/span/i",
        "xpath=//classification-tree-node/div/ul/li[2]/classification-tree-node/div/div/span/i",
        "css=#classificationNodes > li:nth-child(6) > classification-tree-node > div > ul > li:nth-child(1) > classification-tree-node > div > ul > li:nth-child(2) > classification-tree-node > div > div > span > i.glyphicon.glyphicon-plus.text-muted"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li[2]/classification-tree-node/div/div/span/i",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li[2]/classification-tree-node/div/div/span/i",
        "xpath=//li[2]/classification-tree-node/div/ul/li[2]/classification-tree-node/div/div/span/i",
        "css=#classificationNodes > li:nth-child(6) > classification-tree-node > div > ul > li:nth-child(1) > classification-tree-node > div > ul > li:nth-child(2) > classification-tree-node > div > ul > li:nth-child(2) > classification-tree-node > div > div > span > i.glyphicon.glyphicon-plus.text-muted"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li/classification-tree-node/div/div/div/button/i",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"classificationNodes\"]/li[6]/classification-tree-node/div/ul/li/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li/classification-tree-node/div/div/div/button/i",
        "xpath=//li[2]/classification-tree-node/div/ul/li[2]/classification-tree-node/div/ul/li/classification-tree-node/div/div/div/button/i",
        "css=#classificationNodes > li:nth-child(6) > classification-tree-node > div > ul > li:nth-child(1) > classification-tree-node > div > ul > li:nth-child(2) > classification-tree-node > div > ul > li:nth-child(2) > classification-tree-node > div > ul > li > classification-tree-node > div > div > div.actions > button > i"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=/html/body/div[5]/div/div/div[3]/div/div[2]/button",
      "Value": "",
      "Targets": [
        "xpath=/html/body/div[5]/div/div/div[3]/div/div[2]/button",
        "xpath=//div[3]/div/div[2]/button",
        "css=body > div.modal.classificationNodeSelectionService.top.am-fade > div > div > div.modal-footer > div > div.col-md-3 > button"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div/div[2]/div/div/div/button/span[2]",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div/div[2]/div/div/div/button/span[2]",
        "xpath=//div/div/div/button/span[2]",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-pristine.ng-invalid.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-invalid-required.ng-valid-pattern > div > div.form-horizontal > div:nth-child(2) > div > div > div > button:nth-child(1) > span:nth-child(2)"
      ],
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "Counters to loop on multiple articles",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "store",
      "Target": "1",
      "Value": "cpt",
      "Description": ""
    },
    {
      "Command": "store",
      "Target": "2",
      "Value": "uidCpt",
      "Description": ""
    },
    {
      "Command": "store",
      "Target": "",
      "Value": "articleCpt",
      "Description": ""
    },
    {
      "Command": "while_v2",
      "Target": "${cpt} < 100",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "Filling article informations",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[2]/div/div/descriptor-column/ng-include/descriptor-column-taxon-selector/div/ul",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li[2]/div/div[3]/div/div[2]/div/div/descriptor-column/ng-include/descriptor-column-taxon-selector/div/ul",
        "xpath=//li[2]/div/div[3]/div/div[2]/div/div/descriptor-column/ng-include/descriptor-column-taxon-selector/div/ul",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float.ng-valid.ng-valid-required > div > div.descriptorRowForms > ul > li:nth-child(2) > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.TAXON_ID > div > div > descriptor-column > ng-include > descriptor-column-taxon-selector > div > ul"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "id=uid-${uidCpt}-search",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "type",
      "Target": "id=uid-${uidCpt}-search",
      "Value": "e",
      "Description": ""
    },
    {
      "Command": "waitForElementVisible",
      "Target": "xpath=//*[@id=\"uid-${uidCpt}-search\"]/ancestor::div/ul/li/a/span",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"uid-${uidCpt}-search\"]/ancestor::div/ul/li/a/span",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"typeahead-4747-6422-option-0\"]/a/span",
        "xpath=//descriptor-column-taxon-selector/div/div/div/ul/li/a/span",
        "css=#typeahead-4747-6422-option-0 > a > span.label.label-success"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[4]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[4]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
        "xpath=//input[@type='number']",
        "xpath=//descriptor-column-quantity/div/div/input",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-pristine.ng-invalid.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-invalid-required.ng-valid-pattern.ng-valid-parse > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.NET_WEIGHT > div > div > descriptor-column > ng-include > descriptor-column-quantity > div > div > input"
      ],
      "Description": ""
    },
    {
      "Command": "type",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[4]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
      "Value": "12",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[4]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
        "xpath=//input[@type='number']",
        "xpath=//descriptor-column-quantity/div/div/input",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-pristine.ng-invalid.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-invalid-required.ng-valid-pattern.ng-valid-parse > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.NET_WEIGHT > div > div > descriptor-column > ng-include > descriptor-column-quantity > div > div > input"
      ],
      "Description": ""
    },
    {
      "Command": "type",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[5]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
      "Value": "30",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[5]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
        "xpath=//div[5]/div/div/descriptor-column/ng-include/descriptor-column-quantity/div/div/input",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-invalid.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-invalid-required.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.PACKAGE_COUNT > div > div > descriptor-column > ng-include > descriptor-column-quantity > div > div > input"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[6]/div/div/descriptor-column/ng-include/descriptor-column-legislation-country-selector/div/div/select",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[6]/div/div/descriptor-column/ng-include/descriptor-column-legislation-country-selector/div/div/select",
        "xpath=//descriptor-column-legislation-country-selector/div/div/select",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-invalid.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-invalid-required.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.COUNTRY_OF_ORIGIN > div > div > descriptor-column > ng-include > descriptor-column-legislation-country-selector > div > div > select"
      ],
      "Description": ""
    },
    {
      "Command": "select",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[6]/div/div/descriptor-column/ng-include/descriptor-column-legislation-country-selector/div/div/select",
      "Value": "label=Afrique du Sud",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[6]/div/div/descriptor-column/ng-include/descriptor-column-legislation-country-selector/div/div/select",
        "xpath=//descriptor-column-legislation-country-selector/div/div/select",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-invalid.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-invalid-required.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.COUNTRY_OF_ORIGIN > div > div > descriptor-column > ng-include > descriptor-column-legislation-country-selector > div > div > select"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[6]/div/div/descriptor-column/ng-include/descriptor-column-legislation-country-selector/div/div/select/option[3]",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[6]/div/div/descriptor-column/ng-include/descriptor-column-legislation-country-selector/div/div/select/option[3]",
        "xpath=//option[@value='object:706']",
        "xpath=//descriptor-column-legislation-country-selector/div/div/select/option[3]",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float.ng-valid.ng-valid-required > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.COUNTRY_OF_ORIGIN > div > div > descriptor-column > ng-include > descriptor-column-legislation-country-selector > div > div > select > option:nth-child(3)"
      ],
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[12]/div/div/descriptor-column/ng-include/descriptor-column-string/div/div/input",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[12]/div/div/descriptor-column/ng-include/descriptor-column-string/div/div/input",
        "xpath=//descriptor-column-string/div/div/input",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float.ng-valid.ng-valid-required > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.DISTINGUISH_MARK > div > div > descriptor-column > ng-include > descriptor-column-string > div > div > input"
      ],
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "This is where the bug occurs, the type command repeats itself \"Web page connection issue. Retrying last command.\"",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "type",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[12]/div/div/descriptor-column/ng-include/descriptor-column-string/div/div/input",
      "Value": "12548896 - EXPORT POUR LES PETITS CANARDS BIEN DODUS",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li/div/div[3]/div/div[12]/div/div/descriptor-column/ng-include/descriptor-column-string/div/div/input",
        "xpath=//descriptor-column-string/div/div/input",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-valid-phyto-edit-consignment-identification-required.ng-valid-editable.ng-valid-min.ng-valid-max.ng-valid-pattern.ng-valid-parse.ng-dirty.ng-valid-float.ng-valid.ng-valid-required > div > div.descriptorRowForms > ul > li > div > div.descriptorRowColumnsContainer > div > div.col-md-2.descriptorColumn.DISTINGUISH_MARK > div > div > descriptor-column > ng-include > descriptor-column-string > div > div > input"
      ],
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "BUG",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "comment",
      "Target": "Counters update for the next loop",
      "Value": "",
      "Description": ""
    },
    {
      "Command": "executeScript_Sandbox",
      "Target": "return Number(${cpt}) +1;",
      "Value": "cpt",
      "Description": ""
    },
    {
      "Command": "executeScript_Sandbox",
      "Target": "return Number(${uidCpt}) +3;",
      "Value": "uidCpt",
      "Description": ""
    },
    {
      "Command": "executeScript_Sandbox",
      "Target": "return \"[\" + ${cpt} + \"]\";",
      "Value": "articleCpt",
      "Description": ""
    },
    {
      "Command": "click",
      "Target": "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form/div/div/div/div[2]/div/div/button",
      "Value": "",
      "Targets": [
        "xpath=//*[@id=\"commoditiesBox\"]/div[2]/div[2]/section/ng-form/div/div/div/div[2]/div/div/button",
        "xpath=//ng-form/div/div/div/div[2]/div/div/button",
        "css=#commoditiesBox > div.panel-body > div:nth-child(2) > section > ng-form.ng-pristine.ng-valid.ng-valid-phyto-edit-consignment-commodities-required > div > div > div > div.col-md-5 > div.pull-right > div > button:nth-child(1)"
      ],
      "Description": "Add article"
    },
    {
      "Command": "end",
      "Target": "",
      "Value": "",
      "Description": ""
    }
  ]
}

Thanks for the test case. Can you please also provide a video (screencast) of the situation? This way we can compare that we run the macro correctly.

Here are the logs of the issue happening

[info]

Executing:  | click | xpath=//*[@id="commoditiesBox"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[12]/div/div/descriptor-column/ng-include/descriptor-column-string/div/div/input |  | 

[info]

Executing:  | comment | This is where the bug occurs, the type command repeats itself "Web page connection issue. Retrying last command." |  | 

[info]

Executing:  | type | xpath=//*[@id="commoditiesBox"]/div[2]/div[2]/section/ng-form[2]/div/div[2]/ul/li${articleCpt}/div/div[3]/div/div[12]/div/div/descriptor-column/ng-include/descriptor-column-string/div/div/input | 12548896 - EXPORT POUR LES PETITS CANARDS BIEN DODUS | 

[error]

Line 33: lost background heart beat when running command

[info]

Macro failed (Runtime 584.85s)

Videos of the issue occuring and of the test case running
Issue occuring.zip (12.1 MB)
TestCase normal running.zip (21.8 MB)

Html of input where the problem occurs

<input type="text" class="form-control input-sm ng-valid ng-valid-required ng-not-empty ng-dirty ng-valid-parse ng-touched" ng-class="{'mandatory': (descriptorColumn.isMandatory() &amp;&amp; $first)}" ng-model="descriptorColumnData.value" ng-required="descriptorColumn.isMandatory() &amp;&amp; $first" field="Signes distinctifs" focus-on="descriptorRowsState.isFocused(descriptorRow, descriptorColumn, $index)">

Hello,

Have you had the time to take a look ?
A workaround to suggest maybe ?

Thank you