testcafe icon indicating copy to clipboard operation
testcafe copied to clipboard

Unable generate valid JSON representation of a test error

Open aleks-pro opened this issue 3 years ago • 0 comments

What is your Scenario?

I have a custom reporter that uses TestRunErrorFormatableAdapter formatMessage method to generate JSON representation of a test error.

What is the Current behavior?

In some cases, we are unable to create such a decorator that would generate a valid JSON from provided HTML representation of the error, e.g.:

<span class="subtitle">Error in fixture.beforeEach hook</span>
<div class="message">AssertionError: expected &#39;Parker&#39; to deeply equal &#39;Peter&#39;

<span class="diff-added">+ expected</span> <span class="diff-removed">- actual</span>

<span class="diff-removed">-Parker</span>
<span class="diff-added">+Peter</span>
<span class="diff-not-modified"></span></div>

<strong>Browser:</strong> <span class="user-agent">Chrome 104.0.5112.79 / macOS 10.15.7</span>

beforeEachHook_3

What is the Expected behavior?

There is should be a possibility to generate valid JSON representation of a test error

What is your TestCafe test code?

{
   "fixtures":[
      {
         "name":"A set of examples that illustrate how to use TestCafe API",
         "pageUrl":"http://devexpress.github.io/testcafe/example/",
         "tests":[
            {
               "name":"How to type text into an input (Type Text user action)",
               "commands":[
                  
               ]
            }
         ],
         "beforeEachCommands":[
            {
               "callsite":"beforeEachHook_0",
               "options":{
                  
               },
               "selector":{
                  "type":"js-expr",
                  "value":"Selector('#developer-name')"
               },
               "studio":{
                  "offsetX":74,
                  "offsetY":13,
                  "selectors":[
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#developer-name')"
                        },
                        "ruleType":"id"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('[name=\"name\"]')"
                        },
                        "ruleType":"form-input"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('[name=\"name\"]')"
                        },
                        "ruleType":"attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('[name=\"name\"]')"
                        },
                        "ruleType":"attr-attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('fieldset').find('input')"
                        },
                        "ruleType":"attr-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('div').find('div').find('div').find('fieldset').find('input')"
                        },
                        "ruleType":"id-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('body').find('form').find('div').find('div').find('div').find('fieldset').find('input')"
                        },
                        "ruleType":"dom"
                     }
                  ],
                  "useOffsets":false
               },
               "text":"Peter",
               "type":"type-text"
            },
            {
               "callsite":"beforeEachHook_1",
               "options":{
                  "caretPos":0,
                  "replace":true
               },
               "selector":{
                  "type":"js-expr",
                  "value":"Selector('#developer-name')"
               },
               "studio":{
                  "offsetX":null,
                  "offsetY":null,
                  "selectors":[
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#developer-name')"
                        },
                        "ruleType":"id"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('[name=\"name\"]')"
                        },
                        "ruleType":"form-input"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('[name=\"name\"]')"
                        },
                        "ruleType":"attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('[name=\"name\"]')"
                        },
                        "ruleType":"attr-attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('fieldset').find('input')"
                        },
                        "ruleType":"attr-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('div').find('div').find('div').find('fieldset').find('input')"
                        },
                        "ruleType":"id-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('body').find('form').find('div').find('div').find('div').find('fieldset').find('input')"
                        },
                        "ruleType":"dom"
                     }
                  ],
                  "useOffsets":false
               },
               "text":"Paker",
               "type":"type-text"
            },
            {
               "callsite":"beforeEachHook_2",
               "options":{
                  "caretPos":2
               },
               "selector":{
                  "type":"js-expr",
                  "value":"Selector('#developer-name')"
               },
               "studio":{
                  "offsetX":14,
                  "offsetY":14,
                  "selectors":[
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#developer-name')"
                        },
                        "ruleType":"id"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('[name=\"name\"]')"
                        },
                        "ruleType":"form-input"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('[name=\"name\"]')"
                        },
                        "ruleType":"attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('[name=\"name\"]')"
                        },
                        "ruleType":"attr-attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('fieldset').find('input')"
                        },
                        "ruleType":"attr-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('div').find('div').find('div').find('fieldset').find('input')"
                        },
                        "ruleType":"id-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('body').find('form').find('div').find('div').find('div').find('fieldset').find('input')"
                        },
                        "ruleType":"dom"
                     }
                  ],
                  "useOffsets":false
               },
               "text":"r",
               "type":"type-text"
            },
            {
               "actual":{
                  "type":"js-expr",
                  "value":"Selector('#developer-name').value"
               },
               "assertionType":"eql",
               "callsite":"beforeEachHook_3",
               "expected":{
                  "type":"js-expr",
                  "value":"'Peter'"
               },
               "options":{
                  
               },
               "studio":{
                  "selectors":[
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#developer-name').value"
                        },
                        "ruleType":"id"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('[name=\"name\"]').value"
                        },
                        "ruleType":"form-input"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('[name=\"name\"]').value"
                        },
                        "ruleType":"attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('[name=\"name\"]').value"
                        },
                        "ruleType":"attr-attr"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('.column.col-1').find('fieldset').find('input').value"
                        },
                        "ruleType":"attr-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('#main-form').find('div').find('div').find('div').find('fieldset').find('input').value"
                        },
                        "ruleType":"id-dom"
                     },
                     {
                        "rawSelector":{
                           "type":"js-expr",
                           "value":"Selector('body').find('form').find('div').find('div').find('div').find('fieldset').find('input').value"
                        },
                        "ruleType":"dom"
                     }
                  ],
                  "selectorPostfix":".value"
               },
               "type":"assertion"
            }
         ]
      }
   ]
}

TestCafe version

1.20.1

Node.js version

No response

Command-line arguments

testcafe chrome test.testcafe

aleks-pro avatar Aug 18 '22 11:08 aleks-pro