sridharbandi / Java-a11y

Accessibility Automated Testing with Java Selenium
https://sridharbandi.github.io/Java-a11y/
MIT License
12 stars 12 forks source link

Getting error when deserializing JSON #30

Open makrandv opened 1 year ago

makrandv commented 1 year ago

@sridharbandi I am using your accessibility libray for accessibility testing of Salesforce UI , however the test is failing when after " axeRunner.execute();" Below is the code for executing the Axe scanning

                axeRunner = new AxeRunner(getDriver());
                getDriver().get(<salesforceurl>);
                JavascriptExecutor javascriptExecutor = (JavascriptExecutor) getDriver();
                String axe = Reader.getInstance().getAXE();
                javascriptExecutor.executeScript(axe);
                axeRunner.execute();

Below is the error I am getting

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.lang.String from Array value (token JsonToken.START_ARRAY) at [Source: (StringReader); line: 287, column: 20] (through reference chain: io.github.sridharbandi.modal.axe.Issues["incomplete"]->java.util.ArrayList[1]->io.github.sridharbandi.modal.axe.IssueType["nodes"]->java.util.ArrayList[0]->io.github.sridharbandi.modal.axe.Node["target"]->java.util.ArrayList[0])

at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1741)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1515)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1420)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1299)
at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:216)
at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:182)
at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:25)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:313)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:355)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:313)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:355)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:244)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:28)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:313)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:176)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3597)
at io.github.sridharbandi.util.A11y.execute(A11y.java:58)
at io.github.sridharbandi.AxeRunner.execute(AxeRunner.java:27)

[GeneratedJSON.txt](https://github.com/sridharbandi/Java-a11y/files/11350396/GeneratedJSON.txt)

Any help in resolving this error is appreciated.

The code works fine I run it against Google page (google.co.nz)

eotsevych commented 1 year ago

In the first "node" object, the "target" field is correctly represented as an ArrayList of Strings:

"target" : [ ".test-listViewManager" ] However, in the second "node" object, the "target" field is represented as a nested array, which is not expected:

"target" : [ [ "one-appnav", "one-app-nav-bar", ".navUL" ] ]

Fixed in this PR

@makrandv Can you please scan your website with AXE Extension and check is the results displayed correctly? For axeRunner the origin axe.min.js is used from axe-core, and nested array doesn't looks correct for me. Can you please include the scan result here? You can use next script

var script = document.createElement('script');
script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.2/axe.min.js';
document.head.appendChild(script);

script.onload = function() {
  axe.run(function(err, results) {
    if (err) throw err;
    console.log(JSON.stringify(results, null, 2));
  });
};