<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://code-mage.dev</loc>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://code-mage.dev/blog</loc>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://code-mage.dev/about</loc>
<changefreq>monthly</changefreq>
<priority>0.6</priority>
</url>
<url>
<loc>https://code-mage.dev/contact</loc>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/typescript-generics-for-testers</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/the-404-that-broke-three-frameworks</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/testing-pyramid-vs-testing-trophy</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/test-isolation-fresh-fixture-vs-shared-fixture</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/test-doubles-vocabulary-mocks-stubs-fakes</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/solid-principles-for-test-automation-code</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/race-conditions-a-mental-model</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/pure-functions-and-why-theyre-easier-to-test</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/program-to-an-interface-not-an-implementation</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/locator-hierarchy-from-first-principles</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/immutability-and-the-aliasing-bug</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/idempotency-why-tests-should-survive-running-twice</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/i-actually-tested-allure-in-all-three-frameworks</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/dry-principle-in-test-code-when-it-backfires</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/design-patterns-factory-and-strategy-in-test-automation</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/dependency-injection-why-fixtures-exist</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/classes-objects-and-why-page-objects-are-just-oop</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/async-await-event-loop-for-testers</loc>
<lastmod>2026-09-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/webdriverio-open-source-contributions</loc>
<lastmod>2026-09-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/mentoring-junior-engineers-test-frameworks</loc>
<lastmod>2026-09-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/page-object-model-done-right</loc>
<lastmod>2026-09-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/json-compare-tool</loc>
<lastmod>2026-09-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/django-channels-websockets-real-time</loc>
<lastmod>2026-09-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/wdio-wait-for-origin-story</loc>
<lastmod>2026-09-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/selenium-grid-on-a-budget</loc>
<lastmod>2026-09-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/contributing-to-webdriverio-docs</loc>
<lastmod>2026-09-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/proxypal-shadowsocks-vpn-client</loc>
<lastmod>2026-09-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/cypress-16-whats-new</loc>
<lastmod>2026-09-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/playwright-ui-mode-debugging</loc>
<lastmod>2026-08-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/from-full-stack-to-framework-architect</loc>
<lastmod>2026-08-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/freelancing-while-full-time</loc>
<lastmod>2026-07-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/anti-detection-scraping-engine</loc>
<lastmod>2026-07-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/one-webdriverio-framework-three-platforms</loc>
<lastmod>2026-07-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/recursive-traversal-vs-fixed-loops</loc>
<lastmod>2026-06-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/fastapi-microservice-pdf-extraction</loc>
<lastmod>2026-06-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/credential-rotation-state-machine-at-scale</loc>
<lastmod>2026-05-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/cypress-to-playwright-without-touching-tests</loc>
<lastmod>2026-05-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/webdriverio-suite-8-hours-to-2</loc>
<lastmod>2026-04-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/unifying-23-payer-integrations-in-two-weeks</loc>
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/what-is-patchright</loc>
<lastmod>2026-03-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/ci-cd-for-playwright-tests</loc>
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/python-type-hints-for-testers</loc>
<lastmod>2026-02-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/blog/why-playwright-over-selenium</loc>
<lastmod>2026-01-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/prerequisites</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/prerequisites/nodejs-npm-terminal</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/prerequisites/typescript-for-testers</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/prerequisites/browser-devtools</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/prerequisites/testing-fundamentals</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/prerequisites/test-architecture-fundamentals</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/introduction</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/installation-setup</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/debugging-and-selector-tools</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/selectors</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/assertions</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/page-object-model</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/advanced</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/tabs-windows-dialogs</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/frames-downloads-uploads</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/flaky-tests</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/reporting-and-artifacts</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/playwright/ci-cd</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/introduction</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/installation-setup</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/debugging-and-selector-tools</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/writing-tests</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/assertions</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/page-object-model</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/advanced-interactions</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/flaky-tests</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/reporting-and-artifacts</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/webdriverio/ci-cd</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/introduction</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/installation-setup</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/debugging-and-selector-tools</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/selectors-and-commands</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/assertions</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/page-object-model</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/network-and-advanced</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/tabs-windows-multi-origin</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/file-downloads</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/flaky-tests</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/reporting-and-artifacts</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>https://code-mage.dev/tutorial/cypress/ci-cd</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
</urlset>
