creevey 0.10.0-beta.8 → 0.10.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/AUTHORS +2 -0
  2. package/CHANGELOG.md +281 -0
  3. package/README.md +19 -41
  4. package/dist/client/addon/components/Addon.js +18 -8
  5. package/dist/client/addon/components/Addon.js.map +1 -1
  6. package/dist/client/addon/components/Panel.js +4 -4
  7. package/dist/client/addon/components/Panel.js.map +1 -1
  8. package/dist/client/addon/components/TestSelect.js +2 -2
  9. package/dist/client/addon/components/TestSelect.js.map +1 -1
  10. package/dist/client/addon/components/Tools.js +19 -9
  11. package/dist/client/addon/components/Tools.js.map +1 -1
  12. package/dist/client/addon/controller.d.ts +1 -1
  13. package/dist/client/addon/controller.js +3 -3
  14. package/dist/client/addon/controller.js.map +1 -1
  15. package/dist/client/addon/decorator.d.ts +1 -1
  16. package/dist/client/addon/makeDecorator.d.ts +9 -0
  17. package/dist/client/addon/makeDecorator.js +48 -0
  18. package/dist/client/addon/makeDecorator.js.map +1 -0
  19. package/dist/client/addon/manager.js +38 -39
  20. package/dist/client/addon/manager.js.map +1 -1
  21. package/dist/client/addon/preset.d.ts +0 -1
  22. package/dist/client/addon/preset.js +3 -2
  23. package/dist/client/addon/preset.js.map +1 -1
  24. package/dist/client/addon/preview.d.ts +1 -1
  25. package/dist/client/addon/withCreevey.d.ts +5 -3
  26. package/dist/client/addon/withCreevey.js +14 -21
  27. package/dist/client/addon/withCreevey.js.map +1 -1
  28. package/dist/client/shared/components/ImagesView/BlendView.d.ts +2 -2
  29. package/dist/client/shared/components/ImagesView/BlendView.js +18 -8
  30. package/dist/client/shared/components/ImagesView/BlendView.js.map +1 -1
  31. package/dist/client/shared/components/ImagesView/ImagesView.js +1 -1
  32. package/dist/client/shared/components/ImagesView/ImagesView.js.map +1 -1
  33. package/dist/client/shared/components/ImagesView/SideBySideView.d.ts +2 -2
  34. package/dist/client/shared/components/ImagesView/SideBySideView.js +19 -9
  35. package/dist/client/shared/components/ImagesView/SideBySideView.js.map +1 -1
  36. package/dist/client/shared/components/ImagesView/SlideView.d.ts +2 -2
  37. package/dist/client/shared/components/ImagesView/SlideView.js +19 -9
  38. package/dist/client/shared/components/ImagesView/SlideView.js.map +1 -1
  39. package/dist/client/shared/components/ImagesView/SwapView.d.ts +2 -2
  40. package/dist/client/shared/components/ImagesView/SwapView.js +31 -9
  41. package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
  42. package/dist/client/shared/components/ImagesView/common.d.ts +1 -1
  43. package/dist/client/shared/components/PageFooter/PageFooter.js +1 -1
  44. package/dist/client/shared/components/PageFooter/PageFooter.js.map +1 -1
  45. package/dist/client/shared/components/PageFooter/Paging.js +1 -1
  46. package/dist/client/shared/components/PageFooter/Paging.js.map +1 -1
  47. package/dist/client/shared/components/PageHeader/ImagePreview.d.ts +2 -2
  48. package/dist/client/shared/components/PageHeader/ImagePreview.js +2 -1
  49. package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
  50. package/dist/client/shared/components/PageHeader/PageHeader.js +34 -13
  51. package/dist/client/shared/components/PageHeader/PageHeader.js.map +1 -1
  52. package/dist/client/shared/components/ResultsPage.d.ts +2 -2
  53. package/dist/client/shared/components/ResultsPage.js +45 -15
  54. package/dist/client/shared/components/ResultsPage.js.map +1 -1
  55. package/dist/client/shared/creeveyClientApi.js +18 -1
  56. package/dist/client/shared/creeveyClientApi.js.map +1 -1
  57. package/dist/client/shared/helpers.d.ts +1 -3
  58. package/dist/client/shared/helpers.js +4 -19
  59. package/dist/client/shared/helpers.js.map +1 -1
  60. package/dist/client/web/CreeveyApp.d.ts +1 -0
  61. package/dist/client/web/CreeveyApp.js +44 -15
  62. package/dist/client/web/CreeveyApp.js.map +1 -1
  63. package/dist/client/web/CreeveyContext.d.ts +6 -0
  64. package/dist/client/web/CreeveyContext.js +21 -7
  65. package/dist/client/web/CreeveyContext.js.map +1 -1
  66. package/dist/client/web/CreeveyLoader.d.ts +1 -1
  67. package/dist/client/web/CreeveyLoader.js +3 -3
  68. package/dist/client/web/CreeveyLoader.js.map +1 -1
  69. package/dist/client/web/CreeveyView/SideBar/Checkbox.d.ts +4 -4
  70. package/dist/client/web/CreeveyView/SideBar/Checkbox.js +36 -6
  71. package/dist/client/web/CreeveyView/SideBar/Checkbox.js.map +1 -1
  72. package/dist/client/web/CreeveyView/SideBar/Search.js +20 -10
  73. package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
  74. package/dist/client/web/CreeveyView/SideBar/SideBar.js +26 -12
  75. package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
  76. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +67 -13
  77. package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
  78. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js +32 -12
  79. package/dist/client/web/CreeveyView/SideBar/SideBarHeader.js.map +1 -1
  80. package/dist/client/web/CreeveyView/SideBar/SuiteLink.d.ts +6 -6
  81. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +20 -13
  82. package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
  83. package/dist/client/web/CreeveyView/SideBar/TestLink.js +20 -13
  84. package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
  85. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.d.ts +2 -2
  86. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js +2 -2
  87. package/dist/client/web/CreeveyView/SideBar/TestStatusIcon.js.map +1 -1
  88. package/dist/client/web/CreeveyView/SideBar/TestsStatus.d.ts +2 -2
  89. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js +3 -2
  90. package/dist/client/web/CreeveyView/SideBar/TestsStatus.js.map +1 -1
  91. package/dist/client/web/CreeveyView/SideBar/Toggle.js +1 -1
  92. package/dist/client/web/CreeveyView/SideBar/Toggle.js.map +1 -1
  93. package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
  94. package/dist/client/web/KeyboardEventsContext.js +79 -64
  95. package/dist/client/web/KeyboardEventsContext.js.map +1 -1
  96. package/dist/client/web/assets/index-CtSq3IhG.js +518 -0
  97. package/dist/client/web/index.html +1 -1
  98. package/dist/client/web/index.js +26 -11
  99. package/dist/client/web/index.js.map +1 -1
  100. package/dist/client/web/themes.d.ts +2 -0
  101. package/dist/client/web/themes.js +22 -0
  102. package/dist/client/web/themes.js.map +1 -0
  103. package/dist/creevey.d.ts +1 -1
  104. package/dist/creevey.js +122 -41
  105. package/dist/creevey.js.map +1 -1
  106. package/dist/index.d.ts +1 -0
  107. package/dist/playwright/generator.d.ts +25 -0
  108. package/dist/playwright/generator.js +243 -0
  109. package/dist/playwright/generator.js.map +1 -0
  110. package/dist/playwright/helpers.d.ts +2 -0
  111. package/dist/playwright/helpers.js +29 -0
  112. package/dist/playwright/helpers.js.map +1 -0
  113. package/dist/playwright/reporter.d.ts +83 -0
  114. package/dist/playwright/reporter.js +334 -0
  115. package/dist/playwright/reporter.js.map +1 -0
  116. package/dist/playwright/setup.d.ts +3 -0
  117. package/dist/playwright/setup.js +72 -0
  118. package/dist/playwright/setup.js.map +1 -0
  119. package/dist/playwright.d.ts +1 -0
  120. package/dist/playwright.js +3 -1
  121. package/dist/playwright.js.map +1 -1
  122. package/dist/server/compare.d.ts +18 -0
  123. package/dist/server/compare.js +182 -0
  124. package/dist/server/compare.js.map +1 -0
  125. package/dist/server/config.d.ts +3 -3
  126. package/dist/server/config.js +75 -8
  127. package/dist/server/config.js.map +1 -1
  128. package/dist/server/connection.d.ts +3 -0
  129. package/dist/server/connection.js +28 -0
  130. package/dist/server/connection.js.map +1 -0
  131. package/dist/server/docker.d.ts +1 -1
  132. package/dist/server/docker.js +54 -32
  133. package/dist/server/docker.js.map +1 -1
  134. package/dist/server/index.d.ts +2 -2
  135. package/dist/server/index.js +165 -64
  136. package/dist/server/index.js.map +1 -1
  137. package/dist/server/master/api.d.ts +11 -6
  138. package/dist/server/master/api.js +88 -25
  139. package/dist/server/master/api.js.map +1 -1
  140. package/dist/server/master/handlers/capture-handler.d.ts +5 -0
  141. package/dist/server/master/handlers/capture-handler.js +25 -0
  142. package/dist/server/master/handlers/capture-handler.js.map +1 -0
  143. package/dist/server/master/handlers/index.d.ts +4 -0
  144. package/dist/server/master/handlers/index.js +21 -0
  145. package/dist/server/master/handlers/index.js.map +1 -0
  146. package/dist/server/master/handlers/ping-handler.d.ts +2 -0
  147. package/dist/server/master/handlers/ping-handler.js +8 -0
  148. package/dist/server/master/handlers/ping-handler.js.map +1 -0
  149. package/dist/server/master/handlers/static-handler.d.ts +1 -0
  150. package/dist/server/master/handlers/static-handler.js +20 -0
  151. package/dist/server/master/handlers/static-handler.js.map +1 -0
  152. package/dist/server/master/handlers/stories-handler.d.ts +4 -0
  153. package/dist/server/master/handlers/stories-handler.js +24 -0
  154. package/dist/server/master/handlers/stories-handler.js.map +1 -0
  155. package/dist/server/master/master.js +7 -24
  156. package/dist/server/master/master.js.map +1 -1
  157. package/dist/server/master/pool.d.ts +1 -0
  158. package/dist/server/master/pool.js +5 -3
  159. package/dist/server/master/pool.js.map +1 -1
  160. package/dist/server/master/queue.d.ts +1 -1
  161. package/dist/server/master/queue.js +14 -6
  162. package/dist/server/master/queue.js.map +1 -1
  163. package/dist/server/master/runner.d.ts +6 -6
  164. package/dist/server/master/runner.js +98 -130
  165. package/dist/server/master/runner.js.map +1 -1
  166. package/dist/server/master/server.d.ts +1 -1
  167. package/dist/server/master/server.js +193 -88
  168. package/dist/server/master/server.js.map +1 -1
  169. package/dist/server/master/start.d.ts +1 -2
  170. package/dist/server/master/start.js +13 -29
  171. package/dist/server/master/start.js.map +1 -1
  172. package/dist/server/master/testsManager.d.ts +81 -0
  173. package/dist/server/master/testsManager.js +282 -0
  174. package/dist/server/master/testsManager.js.map +1 -0
  175. package/dist/server/playwright/docker-file.d.ts +1 -1
  176. package/dist/server/playwright/docker-file.js +17 -8
  177. package/dist/server/playwright/docker-file.js.map +1 -1
  178. package/dist/server/playwright/docker.d.ts +2 -1
  179. package/dist/server/playwright/docker.js +10 -2
  180. package/dist/server/playwright/docker.js.map +1 -1
  181. package/dist/server/playwright/index-source.mjs +16 -0
  182. package/dist/server/playwright/internal.d.ts +7 -7
  183. package/dist/server/playwright/internal.js +144 -84
  184. package/dist/server/playwright/internal.js.map +1 -1
  185. package/dist/server/playwright/webdriver.d.ts +3 -3
  186. package/dist/server/playwright/webdriver.js +0 -6
  187. package/dist/server/playwright/webdriver.js.map +1 -1
  188. package/dist/server/providers/browser.js +4 -3
  189. package/dist/server/providers/browser.js.map +1 -1
  190. package/dist/server/providers/hybrid.js +2 -2
  191. package/dist/server/providers/hybrid.js.map +1 -1
  192. package/dist/server/report.d.ts +10 -0
  193. package/dist/server/report.js +45 -0
  194. package/dist/server/report.js.map +1 -0
  195. package/dist/server/reporters/creevey.d.ts +7 -0
  196. package/dist/server/reporters/creevey.js +63 -0
  197. package/dist/server/reporters/creevey.js.map +1 -0
  198. package/dist/server/reporters/index.d.ts +2 -0
  199. package/dist/server/reporters/index.js +16 -0
  200. package/dist/server/reporters/index.js.map +1 -0
  201. package/dist/server/reporters/junit.d.ts +16 -0
  202. package/dist/server/reporters/junit.js +167 -0
  203. package/dist/server/reporters/junit.js.map +1 -0
  204. package/dist/server/reporters/teamcity.d.ts +7 -0
  205. package/dist/server/reporters/teamcity.js +60 -0
  206. package/dist/server/reporters/teamcity.js.map +1 -0
  207. package/dist/server/selenium/internal.d.ts +4 -4
  208. package/dist/server/selenium/internal.js +56 -40
  209. package/dist/server/selenium/internal.js.map +1 -1
  210. package/dist/server/selenium/selenoid.js +12 -6
  211. package/dist/server/selenium/selenoid.js.map +1 -1
  212. package/dist/server/selenium/webdriver.d.ts +3 -3
  213. package/dist/server/selenium/webdriver.js +4 -8
  214. package/dist/server/selenium/webdriver.js.map +1 -1
  215. package/dist/server/shutdown.d.ts +1 -0
  216. package/dist/server/shutdown.js +23 -0
  217. package/dist/server/shutdown.js.map +1 -0
  218. package/dist/server/stories.d.ts +0 -1
  219. package/dist/server/stories.js +0 -12
  220. package/dist/server/stories.js.map +1 -1
  221. package/dist/server/telemetry.js +3 -3
  222. package/dist/server/telemetry.js.map +1 -1
  223. package/dist/server/testsFiles/parser.js +45 -5
  224. package/dist/server/testsFiles/parser.js.map +1 -1
  225. package/dist/server/utils.d.ts +23 -0
  226. package/dist/server/utils.js +114 -15
  227. package/dist/server/utils.js.map +1 -1
  228. package/dist/server/webdriver.d.ts +1 -1
  229. package/dist/server/worker/context.d.ts +3 -0
  230. package/dist/server/worker/context.js +15 -0
  231. package/dist/server/worker/context.js.map +1 -0
  232. package/dist/server/worker/match-image.d.ts +8 -12
  233. package/dist/server/worker/match-image.js +11 -178
  234. package/dist/server/worker/match-image.js.map +1 -1
  235. package/dist/server/worker/start.d.ts +2 -2
  236. package/dist/server/worker/start.js +41 -64
  237. package/dist/server/worker/start.js.map +1 -1
  238. package/dist/shared/index.d.ts +1 -1
  239. package/dist/shared/index.js +9 -7
  240. package/dist/shared/index.js.map +1 -1
  241. package/dist/types.d.ts +84 -43
  242. package/dist/types.js +65 -1
  243. package/dist/types.js.map +1 -1
  244. package/docs/cli.md +80 -0
  245. package/docs/config.md +179 -165
  246. package/docs/examples/playwright-reporer/playwright.config.ts +37 -0
  247. package/docs/migration-0.9-to-0.10.md +144 -0
  248. package/docs/playwright-reporter.md +357 -0
  249. package/docs/storybook.md +60 -0
  250. package/docs/tests.md +50 -45
  251. package/package.json +78 -83
  252. package/playwright.config.mts +46 -0
  253. package/src/client/addon/components/Addon.tsx +1 -1
  254. package/src/client/addon/components/Panel.tsx +4 -4
  255. package/src/client/addon/components/TestSelect.tsx +2 -2
  256. package/src/client/addon/components/Tools.tsx +2 -2
  257. package/src/client/addon/controller.ts +4 -4
  258. package/src/client/addon/makeDecorator.ts +69 -0
  259. package/src/client/addon/manager.ts +38 -37
  260. package/src/client/addon/preset.ts +2 -1
  261. package/src/client/addon/withCreevey.ts +16 -19
  262. package/src/client/shared/components/ImagesView/BlendView.tsx +1 -1
  263. package/src/client/shared/components/ImagesView/ImagesView.tsx +1 -1
  264. package/src/client/shared/components/ImagesView/SideBySideView.tsx +2 -2
  265. package/src/client/shared/components/ImagesView/SlideView.tsx +2 -2
  266. package/src/client/shared/components/ImagesView/SwapView.tsx +20 -2
  267. package/src/client/shared/components/ImagesView/common.ts +1 -1
  268. package/src/client/shared/components/PageFooter/PageFooter.tsx +1 -1
  269. package/src/client/shared/components/PageFooter/Paging.tsx +1 -1
  270. package/src/client/shared/components/PageHeader/ImagePreview.tsx +2 -1
  271. package/src/client/shared/components/PageHeader/PageHeader.tsx +23 -7
  272. package/src/client/shared/components/ResultsPage.tsx +33 -10
  273. package/src/client/shared/creeveyClientApi.ts +19 -1
  274. package/src/client/shared/helpers.ts +4 -24
  275. package/src/client/web/CreeveyApp.tsx +30 -9
  276. package/src/client/web/CreeveyContext.tsx +11 -0
  277. package/src/client/web/CreeveyLoader.tsx +2 -2
  278. package/src/client/web/CreeveyView/SideBar/Checkbox.tsx +3 -3
  279. package/src/client/web/CreeveyView/SideBar/Search.tsx +4 -4
  280. package/src/client/web/CreeveyView/SideBar/SideBar.tsx +11 -6
  281. package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +48 -15
  282. package/src/client/web/CreeveyView/SideBar/SideBarHeader.tsx +20 -5
  283. package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +12 -12
  284. package/src/client/web/CreeveyView/SideBar/TestLink.tsx +10 -10
  285. package/src/client/web/CreeveyView/SideBar/TestStatusIcon.tsx +2 -2
  286. package/src/client/web/CreeveyView/SideBar/TestsStatus.tsx +3 -2
  287. package/src/client/web/CreeveyView/SideBar/Toggle.tsx +1 -1
  288. package/src/client/web/KeyboardEventsContext.tsx +61 -73
  289. package/src/client/web/index.tsx +10 -5
  290. package/src/client/web/themes.ts +24 -0
  291. package/src/creevey.ts +92 -38
  292. package/src/playwright/generator.ts +322 -0
  293. package/src/playwright/helpers.ts +31 -0
  294. package/src/playwright/reporter.ts +381 -0
  295. package/src/playwright/setup.ts +84 -0
  296. package/src/playwright.ts +1 -0
  297. package/src/server/compare.ts +260 -0
  298. package/src/server/config.ts +52 -9
  299. package/src/server/connection.ts +26 -0
  300. package/src/server/docker.ts +62 -34
  301. package/src/server/index.ts +166 -79
  302. package/src/server/master/api.ts +94 -28
  303. package/src/server/master/handlers/capture-handler.ts +20 -0
  304. package/src/server/master/handlers/index.ts +4 -0
  305. package/src/server/master/handlers/ping-handler.ts +6 -0
  306. package/src/server/master/handlers/static-handler.ts +16 -0
  307. package/src/server/master/handlers/stories-handler.ts +20 -0
  308. package/src/server/master/master.ts +10 -27
  309. package/src/server/master/pool.ts +7 -3
  310. package/src/server/master/queue.ts +21 -7
  311. package/src/server/master/runner.ts +123 -134
  312. package/src/server/master/server.ts +214 -101
  313. package/src/server/master/start.ts +19 -41
  314. package/src/server/master/testsManager.ts +316 -0
  315. package/src/server/playwright/docker-file.ts +20 -8
  316. package/src/server/playwright/docker.ts +16 -3
  317. package/src/server/playwright/index-source.mjs +16 -0
  318. package/src/server/playwright/internal.ts +176 -103
  319. package/src/server/playwright/webdriver.ts +4 -10
  320. package/src/server/providers/browser.ts +4 -3
  321. package/src/server/providers/hybrid.ts +2 -3
  322. package/src/server/report.ts +51 -0
  323. package/src/server/reporters/creevey.ts +71 -0
  324. package/src/server/reporters/index.ts +11 -0
  325. package/src/server/reporters/junit.ts +207 -0
  326. package/src/server/reporters/teamcity.ts +74 -0
  327. package/src/server/selenium/internal.ts +70 -53
  328. package/src/server/selenium/selenoid.ts +13 -6
  329. package/src/server/selenium/webdriver.ts +8 -12
  330. package/src/server/shutdown.ts +19 -0
  331. package/src/server/stories.ts +1 -12
  332. package/src/server/telemetry.ts +3 -3
  333. package/src/server/testsFiles/parser.ts +52 -4
  334. package/src/server/utils.ts +124 -16
  335. package/src/server/webdriver.ts +1 -1
  336. package/src/server/worker/context.ts +14 -0
  337. package/src/server/worker/match-image.ts +16 -248
  338. package/src/server/worker/start.ts +49 -79
  339. package/src/shared/index.ts +10 -8
  340. package/src/types.ts +91 -58
  341. package/types/global.d.ts +1 -0
  342. package/dist/client/web/assets/index-DB8lHlJw.js +0 -591
  343. package/dist/server/reporter.d.ts +0 -26
  344. package/dist/server/reporter.js +0 -108
  345. package/dist/server/reporter.js.map +0 -1
  346. package/dist/server/update.d.ts +0 -2
  347. package/dist/server/update.js +0 -53
  348. package/dist/server/update.js.map +0 -1
  349. package/src/server/reporter.ts +0 -139
  350. package/src/server/update.ts +0 -74
package/docs/config.md CHANGED
@@ -1,212 +1,226 @@
1
- ## Config/Options
1
+ # Creevey Configuration Examples
2
2
 
3
- ### CLI Options
3
+ Creevey is highly configurable and can be tailored to your specific needs. Here are some examples of how to configure Creevey for your Storybook.
4
4
 
5
- - `--config` — Specify path to config file. Default `.creevey/config.js` or `creevey.config.js`
6
- - `--ui` — Start runner web server
7
- - `--update` — Approve all images from `report` directory
8
- - `--port` — Specify port for web server. Default `3000`
9
- - `--reportDir` — Path where reports will be stored
10
- - `--screenDir` — Path where reference images are located
11
- - `--debug` — Enable debug output
5
+ ## Zero Configuration
12
6
 
13
- ### Creevey config
7
+ The simplest way to get started with Creevey, just run it without any configuration:
14
8
 
15
- In default configuration Creevey take screenshots of `#storybook-root` element only for chrome browser in one concurrent instance, to run tests in different browsers or speedup tests and run in parallel, you need to define config file `.creevey/config.js`
9
+ ```bash
10
+ yarn creevey test -s
11
+ ```
12
+
13
+ This will start Creevey with default settings, using Chrome as the browser and also start Storybook hosted at `http://localhost:6006`. Adding `--ui` flag will start the web server for the UI Runner.
14
+
15
+ **NOTE** By default, Creevey uses Selenium WebDriver, but it's done for backward compatibility and it's recommended to define webdriver explicitly in the configuration.
16
16
 
17
17
  ```ts
18
- module.exports = {
19
- browsers: {
20
- chrome: {
21
- browserName: 'chrome',
22
- // Define initial viewport size
23
- viewport: { width: 1024, height: 720 },
24
- // Increase parallel sessions
25
- limit: 2,
26
- },
27
- firefox: {
28
- browserName: 'firefox',
29
- viewport: { width: 1024, height: 720 },
30
- },
31
- },
18
+ // creevey.config.ts
19
+ import { SeleniumWebdriver } from 'creevey/selenium';
20
+
21
+ const config = {
22
+ webdriver: SeleniumWebdriver,
23
+ };
24
+
25
+ // or use Playwright instead
26
+
27
+ import { PlaywrightWebdriver } from 'creevey/playwright';
28
+
29
+ const config = {
30
+ webdriver: PlaywrightWebdriver,
32
31
  };
33
32
  ```
34
33
 
35
- ### All possible config options
34
+ ## Basic Configuration
36
35
 
37
- :warning: **WARN** :warning: This config is just an example with all possible options. :warning: **WARN** :warning:
36
+ The minimal configuration to test your stories might be:
38
37
 
39
38
  ```ts
40
- const path = require('path');
39
+ // creevey.config.ts
40
+ import { CreeveyConfig } from 'creevey';
41
+ import { PlaywrightWebdriver } from 'creevey/playwright';
42
+
43
+ const config: CreeveyConfig = {
44
+ webdriver: PlaywrightWebdriver,
41
45
 
42
- module.exports = {
43
- // Specify custom Selenium Grid url (see usage below)
44
- // In most cases you don't need this option
45
- gridUrl: '<gridUrl>/wd/hub',
46
+ // The URL where your Storybook is hosted
47
+ storybookUrl: 'http://localhost:9000',
48
+
49
+ // Define which browsers to use for testing
50
+ browsers: {
51
+ chromium: {
52
+ // The browser type name which will be used by Playwright
53
+ browserName: 'chromium',
54
+ // Default viewport dimensions
55
+ viewport: { width: 1024, height: 768 },
56
+ // Limit of retries for failed tests
57
+ maxRetries: 2,
58
+ },
59
+ },
60
+ };
46
61
 
47
- // Default Storybook url
48
- storybookUrl: 'http://localhost:6006',
62
+ export default config;
63
+ ```
49
64
 
50
- // Where original images are stored
51
- screenDir: path.join(__dirname, '../images'),
65
+ ## Multiple Browsers Configuration
52
66
 
53
- // Report directory that contains data from previous runs
54
- reportDir: path.join(__dirname, '../report'),
67
+ It's possible to est your stories across different browsers:
55
68
 
56
- // Pixelmatch options
57
- diffOptions: { threshold: 0.1 },
69
+ ```ts
70
+ // creevey.config.ts
71
+ import { CreeveyConfig } from 'creevey';
72
+ import { PlaywrightWebdriver } from 'creevey/playwright';
58
73
 
59
- // How many times test should be retried before to consider it as failed
60
- maxRetries: 2,
74
+ const config: CreeveyConfig = {
75
+ webdriver: PlaywrightWebdriver,
61
76
 
62
- // Describe browsers and their options
63
77
  browsers: {
64
- // Shorthand declarations of browsers
65
- chrome: true,
66
- ff: 'firefox',
67
-
68
- otherChrome: {
69
- browserName: 'chrome',
70
- // Define initial viewport size
71
- viewport: { width: 1024, height: 720 },
72
- // Increase parallel sessions
78
+ chromium: {
79
+ browserName: 'chromium',
80
+ // Amount of parallel browser sessions
73
81
  limit: 2,
74
- /* Also you can define any browser capabilities here */
75
- version: '86.0',
76
- // It's possible to set Storybook's globals
77
- // https://github.com/storybookjs/storybook/blob/v6.0.0/docs/essentials/toolbars-and-globals.md
78
- // NOTE: This is an experimental feature and will be replaced in future
79
- _storybookGlobals: {
80
- myTheme: 'dark',
81
- },
82
82
  },
83
-
84
- // You can override some global options for specific browser
85
- ie11: {
86
- browserName: 'internet explorer',
87
- // Like user another Selenium Grid url
88
- gridUrl: '<anotherGridUrl>/wd/hub',
89
- // Or use different storybook instance
90
- storybookUrl: 'http://mystoryhost:6007',
91
- // And use you own docker image
92
- // By default Creevey will use selenoid image according browser name and version:
93
- // `selenoid/${browserName}:${version ?? 'latest'}` image
94
- dockerImage: 'microsoft/ie:11.0',
83
+ firefox: {
84
+ browserName: 'firefox',
85
+ limit: 2,
95
86
  },
96
87
  },
88
+ };
89
+
90
+ export default config;
91
+ ```
92
+
93
+ ## Test stories with different themes
94
+
95
+ Test your components with different themes:
97
96
 
98
- // You may want to do something before tests started (for example start browserstack-local)
99
- hooks: {
100
- async before() {
101
- /* ... */
97
+ ```ts
98
+ // creevey.config.ts
99
+ import { CreeveyConfig } from 'creevey';
100
+ import { PlaywrightWebdriver } from 'creevey/playwright';
101
+
102
+ const config: CreeveyConfig = {
103
+ webdriver: PlaywrightWebdriver,
104
+ browsers: {
105
+ dark: {
106
+ browserName: 'chromium',
107
+ // Define a storybook globals which will be applied to the stories
108
+ _storybookGlobals: {
109
+ theme: 'dark',
110
+ },
102
111
  },
103
- async after() {
104
- /* ... */
112
+ light: {
113
+ browserName: 'chromium',
114
+ _storybookGlobals: {
115
+ theme: 'light',
116
+ },
105
117
  },
106
118
  },
107
119
  };
120
+
121
+ export default config;
108
122
  ```
109
123
 
110
- ### Storybook parameters
124
+ ## Using dedicated Selenium Grid server
111
125
 
112
- Also you could define parameters on `global`, `kind` or `story` levels. All these parameters are deeply merged by Storybook for each story. But bear in mind when you define skip option as an array Storybook treats it as primitive value and doesn't merge with other skip options.
126
+ Use Selenium Grid for distributed testing:
113
127
 
114
- ```tsx
115
- // .storybook/preview.tsx
116
- export const parameters = {
117
- creevey: {
118
- // Skip all *hover tests in IE11 on the global level
119
- skip: {
120
- "hovers don't work in ie11": { in: 'ie11', tests: /.*hover$/ },
128
+ ```ts
129
+ // creevey.config.ts
130
+ import { CreeveyConfig } from 'creevey';
131
+ import { SeleniumWebdriver } from 'creevey/selenium';
132
+
133
+ const config: CreeveyConfig = {
134
+ webdriver: SeleniumWebdriver,
135
+ // Selenium Grid connection settings
136
+ gridUrl: 'http://selenium-hub:4444/wd/hub',
137
+ browsers: {
138
+ chrome: {
139
+ browserName: 'chrome',
140
+ // You can define any additional selenium capabilities here
141
+ // https://w3c.github.io/webdriver/#capabilities
142
+ seleniumCapabilities: {
143
+ browserVersion: '128.0',
144
+ platformName: 'linux',
145
+ },
121
146
  },
122
147
  },
123
148
  };
149
+
150
+ export default config;
124
151
  ```
125
152
 
126
- ```tsx
127
- import React from 'react';
128
- import { Meta, Story } from '@storybook/react';
129
- import { CreeveyMeta, CreeveyStory } from 'creevey';
130
- import MyComponent from './src/components/MyComponent';
131
-
132
- export default {
133
- title: 'MyComponent'
134
- parameters: {
135
- creevey: {
136
- // You could skip some browsers/stories or even specific tests
137
- skip: {
138
- "`MyComponent` doesn't support ie11": { in: 'ie11' },
139
- "Loading stories are flaky in firefox": { in: 'firefox', stories: 'Loading' },
140
- "`MyComponent` hovering doesn't work correctly": {
141
- in: ['firefox', 'chrome'],
142
- tests: /.*hover$/,
143
- },
153
+ ## Playwright configuration options
154
+
155
+ Leverage Playwright for testing:
156
+
157
+ ```ts
158
+ // creevey.config.ts
159
+ import { CreeveyConfig } from 'creevey';
160
+ import { PlaywrightWebdriver } from 'creevey/playwright';
161
+
162
+ const config: CreeveyConfig = {
163
+ webdriver: PlaywrightWebdriver,
164
+ browsers: {
165
+ chromium: {
166
+ browserName: 'chromium',
167
+ // Playwright-specific options
168
+ // https://playwright.dev/docs/api/class-browsertype#browser-type-launch-server
169
+ playwrightOptions: {
170
+ headless: false,
171
+ channel: 'chrome-canary',
172
+ slowMo: 50, // Slow down Playwright operations by 50ms
144
173
  },
145
174
  },
146
175
  },
147
- } as Meta & CreeveyMeta;
148
-
149
- export const Basic: Story & CreeveyStory = () => <MyComponent />;
150
- Basic.parameters = {
151
- creevey: {
152
- captureElement: '.container',
153
- // elements to ignore in capturing screenshot
154
- ignoreElements: ['button', '.local-time'],
155
- // Delay before test starts in ms
156
- delay: 1000,
157
- tests: {
158
- /* ... */
159
- },
160
- },
161
176
  };
177
+
178
+ export default config;
162
179
  ```
163
180
 
164
- ### `skip` option examples:
181
+ ## Advanced Configuration
182
+
183
+ Comprehensive example combining multiple features and additional options:
165
184
 
166
185
  ```ts
167
- interface SkipOption {
168
- in?: string | string[] | RegExp;
169
- kinds?: string | string[] | RegExp;
170
- stories?: string | string[] | RegExp;
171
- tests?: string | string[] | RegExp;
172
- }
173
-
174
- type SkipOptions = boolean | string | Record<string, SkipOption | SkipOption[]>;
175
- ```
186
+ // creevey.config.ts
187
+ import path from 'path';
188
+ import MochaJUnitReporter from 'mocha-junit-reporter';
189
+ import { CreeveyConfig } from 'creevey';
190
+ import { PlaywrightWebdriver } from 'creevey/playwright';
191
+
192
+ const config: CreeveyConfig = {
193
+ webdriver: PlaywrightWebdriver,
194
+
195
+ // It's possible to resolve Storybook URL at the runtime
196
+ resolveStorybookUrl: () =>
197
+ fetch('https://example.com/resolve-ip')
198
+ .then((res) => res.text())
199
+ .then((data) => `http://${data}:6006`),
200
+
201
+ // Define custom reference screenshots directory
202
+ screenDir: path.join(process.cwd(), 'screenshots'),
203
+
204
+ // Define custom report directory
205
+ reportDir: path.join(process.cwd(), 'reports'),
206
+
207
+ // Define path where Creevey tests are located
208
+ testDir: path.join(process.cwd(), 'tests'),
209
+
210
+ // You can use any Mocha-like reporter
211
+ reporter: MochaJUnitReporter,
176
212
 
177
- - Skip all stories for all browsers:
178
- - `skip: true`
179
- - `skip: 'Skip reason message'`
180
- - `skip: { 'Skip reason message': true }`
181
- - Skip all stories for specific browsers:
182
- - `skip: { 'Skip reason message': { in: 'ie11' } }`
183
- - `skip: { 'Skip reason message': { in: ['ie11', 'chrome'] } }`
184
- - `skip: { 'Skip reason message': { in: /^fire.*/ } }`
185
- - Skip all stories in specific kinds:
186
- - `skip: { 'Skip reason message': { kinds: 'Button' } }`
187
- - `skip: { 'Skip reason message': { kinds: ['Button', 'Input'] } }`
188
- - `skip: { 'Skip reason message': { kinds: /.*Modal$/ } }`
189
- - Skip all tests in specific stories:
190
- - `skip: { 'Skip reason message': { stories: 'simple' } }`
191
- - `skip: { 'Skip reason message': { stories: ['simple', 'special'] } }`
192
- - `skip: { 'Skip reason message': { stories: /.*large$/ } }`
193
- - Skip specific tests:
194
- - `skip: { 'Skip reason message': { tests: 'click' } }`
195
- - `skip: { 'Skip reason message': { tests: ['hover', 'click'] } }`
196
- - `skip: { 'Skip reason message': { tests: /^press.*$/ } }`
197
- - Multiple skip options:
198
- - for one reason
199
- ```
200
- skip: {
201
- "reason": [{ /* ... */ }, { /* ... */ }],
202
- }
203
- ```
204
- - for several reasons
205
- ```
206
- skip: {
207
- "reason 1": { /* ... */ },
208
- "reason 2": { /* ... */ },
209
- }
210
- ```
211
-
212
- NOTE: If you try to skip stories by story name, the storybook name format will be used (For more info see [storybook-export-vs-name-handling](https://storybook.js.org/docs/formats/component-story-format/#storybook-export-vs-name-handling))
213
+ // Pixelmatch options
214
+ diffOptions: { threshold: 0.1 },
215
+
216
+ // Regex pattern to match test files
217
+ testsRegex: /\.creevey\.ts$/,
218
+
219
+ // Disable using docker, to start browsers locally, it's useful for CI
220
+ useDocker: process.env.CI,
221
+
222
+ browsers: {
223
+ /* ... */
224
+ },
225
+ };
226
+ ```
@@ -0,0 +1,37 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ export default defineConfig({
4
+ testDir: './tests',
5
+ testMatch: 'visual.spec.ts',
6
+ globalSetup: 'creevey/playwright/setup',
7
+ // Configure reporters
8
+ reporter: [
9
+ ['list'],
10
+ // Creevey reporter with debug enabled when playwright is run with `--debug` flag
11
+ ['creevey/playwright/reporter', { debug: !!process.env.PWDEBUG }],
12
+ ],
13
+ // Reference images and report will be saved in these directories
14
+ snapshotDir: './images',
15
+ outputDir: './report',
16
+ use: {
17
+ viewport: { width: 1280, height: 720 },
18
+ baseURL: 'http://localhost:6006',
19
+ },
20
+ projects: [
21
+ {
22
+ name: 'chromium',
23
+ use: { ...devices['Desktop Chrome'] },
24
+ metadata: {
25
+ // Define storybook globals here
26
+ storybookGlobals: {
27
+ theme: 'dark',
28
+ },
29
+ },
30
+ }
31
+ ],
32
+ webServer: {
33
+ command: 'yarn storybook dev --ci -p 6006',
34
+ url: 'http://localhost:6006',
35
+ reuseExistingServer: !process.env.CI,
36
+ },
37
+ });
@@ -0,0 +1,144 @@
1
+ # Migrating from Creevey 0.9 to 0.10
2
+
3
+ This guide outlines the key changes and steps required to update your Creevey setup from version 0.9 to 0.10. Version 0.10 introduces several significant updates, including Playwright support, a new test context API, and changes to configuration.
4
+
5
+ ---
6
+
7
+ ## Breaking Changes
8
+
9
+ ### 1. Browser Configuration in `creevey.config.ts`
10
+
11
+ The way browsers are configured has been updated to better distinguish between Selenium and Playwright settings.
12
+
13
+ - The new `webdriver` field lets you choose your WebDriver implementation. While it defaults to Selenium for now, this may change. We recommend explicitly setting it by importing and using either `SeleniumWebdriver` or `PlaywrightWebdriver`.
14
+ - Selenium-specific capabilities (e.g., `browserVersion`, `platformName`) must now be nested under a `seleniumCapabilities` object.
15
+ - Playwright-specific options should be placed under a `playwrightOptions` object.
16
+
17
+ **Before (0.9):**
18
+
19
+ ```javascript
20
+ // creevey.config.js
21
+ export default {
22
+ browsers: {
23
+ chrome: {
24
+ browserName: 'chrome',
25
+ browserVersion: '90.0',
26
+ platformName: 'linux',
27
+ },
28
+ },
29
+ };
30
+ ```
31
+
32
+ **After (0.10):**
33
+
34
+ ```typescript
35
+ // creevey.config.ts
36
+ import type { CreeveyConfig } from 'creevey';
37
+ import { SeleniumWebdriver } from 'creevey/selenium';
38
+ // or
39
+ // import { PlaywrightWebdriver } from 'creevey/playwright';
40
+
41
+ const config: CreeveyConfig = {
42
+ webdriver: SeleniumWebdriver, // or PlaywrightWebdriver
43
+ browsers: {
44
+ chrome: {
45
+ // For Selenium
46
+ browserName: 'chrome',
47
+ seleniumCapabilities: {
48
+ browserVersion: '90.0',
49
+ platformName: 'linux',
50
+ },
51
+ },
52
+ firefoxPlaywright: {
53
+ // For Playwright
54
+ browserName: 'firefox', // 'chromium', 'firefox', or 'webkit' for Playwright
55
+ playwrightOptions: {
56
+ headless: true,
57
+ },
58
+ },
59
+ },
60
+ };
61
+
62
+ export default config;
63
+ ```
64
+
65
+ ### 2. Mocha Removal and New `CreeveyTestContext` API
66
+
67
+ Creevey no longer uses the Mocha testing framework. Tests now use a `CreeveyTestContext` object passed as an argument to the test function.
68
+
69
+ - Replace `this` with the `context` parameter in your tests.
70
+ - Image matching methods (e.g., `matchImage`, `takeScreenshot`) are now called on the `context` object.
71
+ - The `context.webdriver` property gives you direct access to the configured WebDriver instance (Selenium or Playwright) for advanced browser interactions.
72
+
73
+ **Before (0.9 - Mocha style):**
74
+
75
+ ```javascript
76
+ it('should match the image', async function () {
77
+ this.expect(await this.takeScreenshot()).to.matchImage('example');
78
+ });
79
+ ```
80
+
81
+ **After (0.10 - New context style):**
82
+
83
+ ```javascript
84
+ it('should match the image', async (context) => {
85
+ await context.matchImage(await context.takeScreenshot(), 'example');
86
+ });
87
+
88
+ // Example using context.webdriver with Selenium WebDriver API
89
+ it('should interact with an element using Selenium', async (context) => {
90
+ const seleniumWebDriver = context.webdriver; // Assuming SeleniumWebdriver is configured
91
+ const element = await seleniumWebDriver.findElement({ css: '#myElement' });
92
+ await element.click();
93
+ // ... more Selenium interactions
94
+ await context.matchImage(await context.takeScreenshot(), 'selenium-interaction');
95
+ });
96
+
97
+ // Example using context.webdriver with Playwright API
98
+ it('should interact with an element using Playwright', async (context) => {
99
+ const playwrightPage = context.webdriver; // Assuming PlaywrightWebdriver is configured
100
+ await playwrightPage.click('#myElement');
101
+ // ... more Playwright interactions
102
+ await context.matchImage(await context.takeScreenshot(), 'playwright-interaction');
103
+ });
104
+ ```
105
+
106
+ ### 3. Reporter Configuration
107
+
108
+ Reporter setup has moved from command-line options to the `creevey.config.ts` file.
109
+
110
+ **Example (0.10):**
111
+
112
+ ```typescript
113
+ // creevey.config.ts
114
+ import type { CreeveyConfig } from 'creevey';
115
+
116
+ const config: CreeveyConfig = {
117
+ reporter: 'junit', // or 'teamcity', 'creevey'
118
+ reporterOptions: {
119
+ // For JUnit: { outputFile: 'report.xml' }
120
+ // For Creevey HTML reporter (default): { reportDir: './report' }
121
+ },
122
+ };
123
+
124
+ export default config;
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Key New Features & Updates
130
+
131
+ - **Creevey Playwright Reporter:** Integrate Creevey's visual testing into your existing Playwright test suites. See `docs/playwright-reporter.md` for details.
132
+ - **Approve Tests from Report UI (Update Mode):** Approve visual changes directly in the Creevey report UI. Run with `creevey report` to use the web UI for reviewing and approving screenshots.
133
+ - **ODiff Image Comparison:** Use `odiff` for image comparison with the `--odiff` flag and `odiffOptions` in config.
134
+ - **Easier Storybook Autostart:** Use `creevey test -s` or `creevey test --storybook-start` to automatically start Storybook. Creevey will find a free port if necessary.
135
+
136
+ ---
137
+
138
+ ## Other Notable Changes
139
+
140
+ - **`--no-docker` Option:** A command-line flag to disable Docker, overriding `useDocker: true` in your config.
141
+
142
+ ---
143
+
144
+ We recommend reviewing the full announcement for details on all new features and improvements. After updating, test your suite thoroughly to ensure a smooth transition.