JUnit XML
Selenium Boot generates a JUnit-compatible XML report at target/surefire-reports/TEST-SeleniumBoot.xml. This format is understood by virtually every CI system and test reporting tool.
Report location
target/
└── surefire-reports/
└── TEST-SeleniumBoot.xml
Format
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="SeleniumBoot" tests="12" failures="1" errors="0" skipped="1" time="34.21">
<testcase classname="LoginTest" name="validLogin" time="2.341"/>
<testcase classname="CheckoutTest" name="checkout_withInvalidCard" time="1.823">
<failure message="Expected [Order confirmed] but found [Payment declined]"
type="LOCATOR_NOT_FOUND">
[LOCATOR_NOT_FOUND] NoSuchElementException in cause chain
org.openqa.selenium.NoSuchElementException: no such element
at com.example.tests.CheckoutTest.checkout_withInvalidCard(CheckoutTest.java:42)
...
</failure>
</testcase>
<testcase classname="ProfileTest" name="updateAvatar" time="0.0">
<skipped/>
</testcase>
</testsuite>
Failure messages
The message attribute on <failure> contains the actual assertion message or exception message from your test — not a generic "Test failed" placeholder.
The type attribute is the failure category (LOCATOR_NOT_FOUND, TIMEOUT, UNKNOWN, …), and the first line of the body names the evidence it was chosen from. The original stack trace follows unchanged.
This means CI tools that display failure summaries (GitHub Actions, Jenkins, Azure Pipelines) show meaningful error descriptions without needing to open the full report.
CI integration
GitHub Actions — dorny/test-reporter
- name: Publish test results
uses: dorny/test-reporter@v1
if: always()
with:
name: Selenium Boot Results
path: '**/surefire-reports/TEST-*.xml'
reporter: java-junit
fail-on-empty: false
Jenkins
post {
always {
junit '**/surefire-reports/TEST-*.xml'
}
}
Azure Pipelines
- task: PublishTestResults@2
condition: always()
inputs:
testResultsFormat: JUnit
testResultsFiles: '**/surefire-reports/TEST-*.xml'
testRunTitle: 'Selenium Boot'
Maven Surefire XML
Maven Surefire also generates its own XML files per class in target/surefire-reports/. Both sets of XML files are valid JUnit format and can be published together.
To publish all XML files:
path: 'target/surefire-reports/TEST-*.xml'