testcafe
testcafe copied to clipboard
Unable generate valid JSON representation of a test error
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 'Parker' to deeply equal 'Peter'
<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