Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
43bd72f
chore: adding lombok.nonNull.exceptionType = JDK to lombok.config to …
giulong Jun 27, 2025
c0d9094
feat: introducing configuration key to override screenshots folder
giulong Jun 27, 2025
189bcb0
refactor: replacing uuid with incremental number as screenshots suffix
giulong Jun 27, 2025
171c033
refactor: deleting logback-test.xml from it modules
giulong Jun 29, 2025
9166bbf
refactor: leveraging Files.notExists instead of explicitly negating F…
giulong Jun 29, 2025
40ecfc3
refactor: simplifying screenshot names removing leading frame value
giulong Jun 30, 2025
f434c98
refactor: simplifying video names by removing uuid
giulong Jul 1, 2025
3c97c72
Revert "refactor: simplifying video names by removing uuid"
giulong Jul 1, 2025
28004ad
Revert "refactor: replacing uuid with incremental number as screensho…
giulong Jul 1, 2025
bca15aa
Merge branch 'develop' into feature/visual-regression-testing
giulong Jul 30, 2025
3fab096
build: introducing it-visual-regression module
giulong Aug 2, 2025
2226036
refactor: moving TestData under utils package
giulong Aug 7, 2025
df5063f
refactor: renaming ExtentTestConsumer to ExtentTestEndConsumer and mo…
giulong Aug 9, 2025
c01db11
refactor: few filters combined predicates
giulong Aug 10, 2025
04daddd
refactor: screenshots map key is a String instead of Path
giulong Aug 12, 2025
782a5a1
refactor: a couple methods more return the SpectrumEntity instance to…
giulong Aug 12, 2025
e45732f
refactor: renaming internal html templates
giulong Aug 13, 2025
3cf2146
test: leveraging assertThrowsExactly
giulong Aug 13, 2025
b7444fc
build: placing Spectrum LauncherSessionListener in each module instea…
giulong Aug 14, 2025
92e79e1
Revert "build: placing Spectrum LauncherSessionListener in each modul…
giulong Aug 15, 2025
42049b6
feat(visual regression): introducing visual regression testing feature
giulong Aug 15, 2025
1fc1d18
feat(visual regression): adding parameter to override snapshots refer…
giulong Aug 16, 2025
d23f8a4
fix: video consumers listen to both auto and manual screenshots events
giulong Aug 17, 2025
1239ce8
Revert "test: leveraging assertThrowsExactly"
giulong Aug 17, 2025
bad38bd
feat(visual regression): adding fail fast capability to immediately b…
giulong Aug 17, 2025
78ccbac
fix(visual regression): inlining visual regression images
giulong Aug 18, 2025
2a6fc95
test: adding assertion messages to extent reports verifiers
giulong Aug 18, 2025
e7266df
refactor: renaming ScreenshotConsumer to VideoAutoScreenshotProducer
giulong Aug 18, 2025
aee10d1
test: injecting singletons in unit tests via custom annotation resolv…
giulong Aug 23, 2025
6ae2ba9
build: adding visual-regression module configuration in cleanup module
giulong Sep 14, 2025
922b784
refactor(visual-regression): dedicated events consumer
giulong Sep 14, 2025
5514404
fix: narrowing configuration field visibility wrongly set as public
giulong Sep 14, 2025
1e972be
refactor: introducing FileUtils.compare methods to encapsulate the by…
giulong Sep 14, 2025
96a9356
fix(visual-regression): visualRegressionCheck events consumer runs be…
giulong Sep 14, 2025
1aeb36d
fix: using undecorated driver when taking manual screenshots to not e…
giulong Sep 14, 2025
c36e633
refactor: allowing decimal values in DurationDeserializer
giulong Sep 14, 2025
4b9ac90
Merge branch 'develop' into feature/visual-regression-testing
giulong Sep 24, 2025
ad0efbc
feat(visual regression): introducing configurable additional checks
giulong Oct 1, 2025
c7c2c1a
Merge branch 'develop' of github.com:giulong/spectrum into feature/vi…
giulong Oct 1, 2025
974e518
Merge branch 'develop' of github.com:giulong/spectrum into feature/vi…
giulong Oct 11, 2025
4f6b773
refactor: aligning with changes on develop, moving extension context …
giulong Oct 11, 2025
3cc268a
refactor(visual regression): running visual regression ITs in chrome …
giulong Oct 11, 2025
4c311ac
fix(visual regression): visual regression consumers do not add screen…
giulong Oct 11, 2025
3f86ac7
build: switching maven compiler plugin to use release=21 parameter in…
giulong Oct 11, 2025
85cad57
test(visual regression): IT to verify snapshots creation, and success…
giulong Oct 12, 2025
19d172b
test(visual regression): VisualRegressionIT failing fast, and testing…
giulong Oct 12, 2025
1b48201
test(visual regression): minor fix
giulong Oct 12, 2025
a0cbb86
feat: adding beforeGetScreenshotAs and afterGetScreenshotAs to Events…
giulong Oct 12, 2025
054b821
Merge branch 'develop' into feature/visual-regression-testing
giulong Oct 21, 2025
ba6cda9
Merge branch 'develop' into feature/visual-regression-testing
giulong Dec 8, 2025
82532f1
Merge branch 'develop' into feature/visual-regression-testing
giulong Dec 11, 2025
cd2fd66
build: full build versioned run configuration executes spotless apply…
giulong Dec 11, 2025
46af4f9
test: introducing CommonExtentVerifier with common assertions
giulong Dec 11, 2025
829ffae
feat(visual regression): enabling auto-screenshot visual regressions
giulong Dec 14, 2025
1c9254d
refactor(visual regression): minor refactor renaming VISUAL_REGRESSIO…
giulong Dec 14, 2025
6c08815
fix(visual regression): moving video events consumers before visual r…
giulong Dec 19, 2025
f519a1f
feat(visual regression): adding visual regression screenshots to the …
giulong Dec 19, 2025
cf1b76a
refactor: annotating EventsWatcher extension context parameters as No…
giulong Dec 20, 2025
62d31af
build: versioning it-visual-regression run configuration
giulong Dec 20, 2025
a16fef6
fix(visual regression): not-fail-fast vrt fail at the end
giulong Dec 21, 2025
3594e95
fix: introducing dedicated method in FileUtils to read bytes
giulong Dec 21, 2025
09d87fb
feat: introducing overloaded service methods to take screenshots of p…
giulong Dec 22, 2025
4df5fc3
feat(visual regression): verifying visual regressions on webElements …
giulong Dec 22, 2025
678d9ce
build(deps): bump org.apache.maven:maven-model from 3.9.11 to 3.9.12
dependabot[bot] Dec 22, 2025
722dc65
build(deps): bump ch.qos.logback:logback-classic from 1.5.22 to 1.5.23
dependabot[bot] Dec 22, 2025
1adbee5
build: adding explicit jspecify dependency
giulong Dec 22, 2025
9cc551d
refactor: replacing jetbrains NotNull annotation with JSpecify NonNull
giulong Dec 22, 2025
69486d6
build(visual regression): running visual regression tests in parallel
giulong Dec 24, 2025
751984e
chore(visual regression): minor log addition
giulong Dec 24, 2025
d2e97df
fix: EventsConsumer.match method is now synchronized to avoid race co…
giulong Dec 24, 2025
47ad421
chore: solving a couple minor checkstyle warnings
giulong Dec 24, 2025
a086743
test(visual regression): introducing dedicate it-visual-regression-fa…
giulong Dec 24, 2025
91912ae
build: adding spotless apply to spectrum-only run configurations
giulong Dec 25, 2025
db33948
feat(visual regression): supporting dynamic tests such as TestFactory
giulong Dec 26, 2025
5dbbc50
build: running full maven build with 1 thread per core to highly redu…
giulong Dec 26, 2025
6767633
build: explicitly using maven wrapper in versioned run configuration …
giulong Dec 26, 2025
f4ef3b0
build(gh actions): running full maven build with 1 thread per core to…
giulong Dec 26, 2025
0bcfe94
refactor(visual regression): removing unused VISUAL_REGRESSION frame
giulong Dec 26, 2025
261cf5e
refactor: removing useless SneakyThrows annotation
giulong Dec 27, 2025
0812238
feat(visual regression): configuring which screenshots to check, such…
giulong Dec 28, 2025
7adfce9
refactor: getting rid of generic AUTO frame in favor of AUTO_BEFORE a…
giulong Dec 28, 2025
9f2eb1f
feat(visual regression): building regression and reference diff and s…
giulong Dec 30, 2025
68da1a2
refactor: removing useless final modifier in abstract method
giulong Dec 30, 2025
330ab54
refactor: removing useless addScreenshotToReport method
giulong Dec 30, 2025
df301b9
refactor: minor log addition in log level deserializers
giulong Dec 30, 2025
3b636c6
test(visual regression): better screenshot diff in ITs using checkboxes
giulong Dec 30, 2025
10532be
test(visual regression): checking diff is shown in html report
giulong Dec 31, 2025
c3455dc
fix: removing final modifier from configurable fields that could be o…
giulong Dec 31, 2025
340c96b
test: generating test steps in driver-dedicated folders to avoid flak…
giulong Dec 31, 2025
17db7bc
test: using a screenshot generated during the test instead of an hard…
giulong Dec 31, 2025
048fe39
refactor: simplifying FileUtils.read method
giulong Dec 31, 2025
8c3e570
feat(visual regression): introducing pixels threshold in highlight diff
giulong Jan 1, 2026
dc66d77
build: versioning run configuration to inject the LauncherSessionList…
giulong Jan 1, 2026
270f1d4
feat(visual regression): introducing OutlineDiff to give a different …
giulong Jan 1, 2026
9bec62d
test(visual regression): minor expected exception fix in VisualRegres…
giulong Jan 1, 2026
33d1a80
Merge branch 'develop' of github.com:giulong/spectrum into feature/vi…
giulong Jan 1, 2026
4808a93
test: renaming MockSingleton annotation to MockFinal, while using it …
giulong Jan 1, 2026
3d7176d
test: leveraging new mockStatic method with reified args
giulong Jan 1, 2026
e5a6165
refactor: event payload as domain object
giulong Jan 1, 2026
d2bc854
docs: adding javadocs to EventsDispatcher overloaded fire methods
giulong Jan 2, 2026
0f17ecc
build: minor cleaning of versioned run configurations
giulong Jan 2, 2026
2f36fbe
docs: collapsing DEV.md into CONTRIBUTING.md
giulong Jan 2, 2026
8ea7982
docs: indenting code snippets inside blockquotes in gh pages
giulong Jan 3, 2026
41bfb33
docs: injecting copy button in code snippets dynamically in gh pages
giulong Jan 3, 2026
9f20640
fix(visual regression): not showing diff in html report by default
giulong Jan 4, 2026
a27523d
docs(visual regression): adding vrt section to gh pages
giulong Jan 4, 2026
0f88c1f
refactor: leveraging FileUtils.readBytesOf
giulong Jan 4, 2026
11923c5
chore: applying spotless
giulong Jan 4, 2026
01bf05e
Merge pull request #448 from giulong/feature/visual-regression-testing
giulong Jan 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ jobs:
export SPECTRUM_VIDEO_SKIPDUPLICATEFRAMES=false
export SPECTRUM_APPLICATION_BASEURL='https://the-internet.herokuapp.com/'
./mvnw install:install-file -ntp -Dfile=$GITHUB_WORKSPACE/spectrum-${{ env.VERSION }}.jar -DgroupId=io.github.giulong -DartifactId=spectrum -Dversion=${{ env.VERSION }} -Dpackaging=jar
./mvnw install -DskipSign -Dmaven.plugin.validation=NONE ${{ matrix.directives }} -ntp -P ${{ matrix.profiles }}
./mvnw -T 1C install -DskipSign -Dmaven.plugin.validation=NONE ${{ matrix.directives }} -ntp -P ${{ matrix.profiles }}

- name: Publish html report
if: success() || failure()
Expand Down Expand Up @@ -185,7 +185,7 @@ jobs:
disable-animations: true
script: |
./mvnw install:install-file -ntp -Dfile=$GITHUB_WORKSPACE/spectrum-${{ env.VERSION }}.jar -DgroupId=io.github.giulong -DartifactId=spectrum -Dversion=${{ env.VERSION }} -Dpackaging=jar
./mvnw install -DskipSign -Denforcer.skip -Dmaven.plugin.validation=NONE -DappiumTests -ntp -P appium
./mvnw -T 1C install -DskipSign -Denforcer.skip -Dmaven.plugin.validation=NONE -DappiumTests -ntp -P appium

- name: Publish html report
if: success() || failure()
Expand Down
57 changes: 57 additions & 0 deletions .run/framework-only no tests.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="framework-only no tests" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings">
<MavenGeneralSettings>
<option name="alwaysUpdateSnapshots" value="false" />
<option name="checksumPolicy" value="NOT_SET" />
<option name="customMavenHome" />
<option name="emulateTerminal" value="false" />
<option name="failureBehavior" value="NOT_SET" />
<option name="localRepository" value="" />
<option name="mavenHome" value="Use Maven wrapper" />
<option name="mavenHomeTypeForPersistence" value="WRAPPER" />
<option name="nonRecursive" value="false" />
<option name="outputLevel" value="INFO" />
<option name="printErrorStackTraces" value="false" />
<option name="showDialogWithAdvancedSettings" value="false" />
<option name="threads" />
<option name="useMavenConfig" value="true" />
<option name="userSettingsFile" value="" />
<option name="workOffline" value="false" />
</MavenGeneralSettings>
</option>
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="cmdOptions" />
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="spotless:apply" />
<option value="install" />
<option value="-DskipTests" />
<option value="-DskipSign" />
<option value="-ntp" />
<option value="-P" />
<option value="framework-only" />
</list>
</option>
<option name="multimoduleDir" />
<option name="pomFileName" />
<option name="profilesMap">
<map />
</option>
<option name="projectsCmdOptionValues">
<list />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>
56 changes: 56 additions & 0 deletions .run/framework-only.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="framework-only" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings">
<MavenGeneralSettings>
<option name="alwaysUpdateSnapshots" value="false" />
<option name="checksumPolicy" value="NOT_SET" />
<option name="customMavenHome" />
<option name="emulateTerminal" value="false" />
<option name="failureBehavior" value="NOT_SET" />
<option name="localRepository" value="" />
<option name="mavenHome" value="Use Maven wrapper" />
<option name="mavenHomeTypeForPersistence" value="WRAPPER" />
<option name="nonRecursive" value="false" />
<option name="outputLevel" value="INFO" />
<option name="printErrorStackTraces" value="false" />
<option name="showDialogWithAdvancedSettings" value="false" />
<option name="threads" />
<option name="useMavenConfig" value="true" />
<option name="userSettingsFile" value="" />
<option name="workOffline" value="false" />
</MavenGeneralSettings>
</option>
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="cmdOptions" />
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="spotless:apply" />
<option value="install" />
<option value="-DskipSign" />
<option value="-ntp" />
<option value="-P" />
<option value="framework-only" />
</list>
</option>
<option name="multimoduleDir" />
<option name="pomFileName" />
<option name="profilesMap">
<map />
</option>
<option name="projectsCmdOptionValues">
<list />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>
61 changes: 61 additions & 0 deletions .run/full build.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="full build" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings">
<MavenGeneralSettings>
<option name="alwaysUpdateSnapshots" value="false" />
<option name="checksumPolicy" value="NOT_SET" />
<option name="customMavenHome" />
<option name="emulateTerminal" value="false" />
<option name="failureBehavior" value="NOT_SET" />
<option name="localRepository" value="" />
<option name="mavenHome" value="Use Maven wrapper" />
<option name="mavenHomeTypeForPersistence" value="WRAPPER" />
<option name="nonRecursive" value="false" />
<option name="outputLevel" value="INFO" />
<option name="printErrorStackTraces" value="false" />
<option name="showDialogWithAdvancedSettings" value="false" />
<option name="threads" />
<option name="useMavenConfig" value="true" />
<option name="userSettingsFile" value="" />
<option name="workOffline" value="false" />
</MavenGeneralSettings>
</option>
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="cmdOptions" />
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="-T" />
<option value="1C" />
<option value="clean" />
<option value="spotless:apply" />
<option value="install" />
<option value="-DskipSign" />
<option value="-DbrowsersTests" />
<option value="-DappiumTests" />
<option value="-DmacosTests" />
<option value="-fae" />
<option value="-ntp" />
</list>
</option>
<option name="multimoduleDir" />
<option name="pomFileName" />
<option name="profilesMap">
<map />
</option>
<option name="projectsCmdOptionValues">
<list />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>
53 changes: 53 additions & 0 deletions .run/inject LauncherSessionListener.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="inject LauncherSessionListener" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings">
<MavenGeneralSettings>
<option name="alwaysUpdateSnapshots" value="false" />
<option name="checksumPolicy" value="NOT_SET" />
<option name="customMavenHome" />
<option name="emulateTerminal" value="false" />
<option name="failureBehavior" value="NOT_SET" />
<option name="localRepository" value="" />
<option name="mavenHome" value="Use Maven wrapper" />
<option name="mavenHomeTypeForPersistence" value="WRAPPER" />
<option name="nonRecursive" value="false" />
<option name="outputLevel" value="INFO" />
<option name="printErrorStackTraces" value="false" />
<option name="showDialogWithAdvancedSettings" value="false" />
<option name="threads" />
<option name="useMavenConfig" value="true" />
<option name="userSettingsFile" value="" />
<option name="workOffline" value="false" />
</MavenGeneralSettings>
</option>
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="cmdOptions" />
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="clean" />
<option value="-pl" />
<option value="spectrum,cleanup" />
</list>
</option>
<option name="multimoduleDir" />
<option name="pomFileName" />
<option name="profilesMap">
<map />
</option>
<option name="projectsCmdOptionValues">
<list />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>
13 changes: 13 additions & 0 deletions .run/it-visual-regression-fae.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="it-visual-regression-fae" type="JUnit" factoryName="JUnit">
<module name="it-visual-regression-fae" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="directory" />
<option name="VM_PARAMETERS" value="-ea -Djunit.jupiter.execution.parallel.enabled=true -Djunit.jupiter.execution.parallel.mode.default=same_thread -Djunit.jupiter.execution.parallel.mode.classes.default=concurrent" />
<dir value="$PROJECT_DIR$/it-visual-regression-fae/src/test/java" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
13 changes: 13 additions & 0 deletions .run/it-visual-regression.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="it-visual-regression" type="JUnit" factoryName="JUnit">
<module name="it-visual-regression" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="directory" />
<option name="VM_PARAMETERS" value="-ea -Djunit.jupiter.execution.parallel.enabled=true -Djunit.jupiter.execution.parallel.mode.default=same_thread -Djunit.jupiter.execution.parallel.mode.classes.default=concurrent" />
<dir value="$PROJECT_DIR$/it-visual-regression/src/test/java" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
24 changes: 22 additions & 2 deletions .run/spectrum checkstyle.run.xml → .run/lint.run.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,26 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="spectrum checkstyle" type="MavenRunConfiguration" factoryName="Maven">
<configuration default="false" name="lint" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings" />
<option name="myGeneralSettings">
<MavenGeneralSettings>
<option name="alwaysUpdateSnapshots" value="false" />
<option name="checksumPolicy" value="NOT_SET" />
<option name="customMavenHome" />
<option name="emulateTerminal" value="false" />
<option name="failureBehavior" value="NOT_SET" />
<option name="localRepository" value="" />
<option name="mavenHome" value="Use Maven wrapper" />
<option name="mavenHomeTypeForPersistence" value="WRAPPER" />
<option name="nonRecursive" value="false" />
<option name="outputLevel" value="INFO" />
<option name="printErrorStackTraces" value="false" />
<option name="showDialogWithAdvancedSettings" value="false" />
<option name="threads" />
<option name="useMavenConfig" value="true" />
<option name="userSettingsFile" value="" />
<option name="workOffline" value="false" />
</MavenGeneralSettings>
</option>
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
Expand All @@ -12,6 +31,7 @@
<option name="goals">
<list>
<option value="checkstyle:checkstyle" />
<option value="spotless:apply" />
<option value="-Dcheckstyle.config.location=checkstyle.xml" />
<option value="-DskipSign" />
<option value="-DskipTests" />
Expand Down
37 changes: 0 additions & 37 deletions .run/spectrum framework-only no tests.run.xml

This file was deleted.

36 changes: 0 additions & 36 deletions .run/spectrum framework-only.run.xml

This file was deleted.

Loading
Loading