<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://shaftengine.netlify.app/blog</id>
    <title>SHAFT User Guide Blog</title>
    <updated>2026-03-31T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://shaftengine.netlify.app/blog"/>
    <subtitle>SHAFT User Guide Blog</subtitle>
    <icon>https://shaftengine.netlify.app/img/shaft.ico</icon>
    <entry>
        <title type="html"><![CDATA[🚀 SHAFT 10.1.20260331: What's New and Why You Should Upgrade Today]]></title>
        <id>https://shaftengine.netlify.app/blog/release-10.1.20260331</id>
        <link href="https://shaftengine.netlify.app/blog/release-10.1.20260331"/>
        <updated>2026-03-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Hey there, SHAFT community! 👋]]></summary>
        <content type="html"><![CDATA[<p>Hey there, SHAFT community! 👋</p>
<p>A fresh release just dropped and it's packed with improvements you don't want to miss. <strong>SHAFT_ENGINE 10.1.20260331</strong> is here, and whether you're a seasoned SHAFT user or just getting started, there's something in this release for you.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-what-changed">⚡ What Changed?<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#-what-changed" class="hash-link" aria-label="Direct link to ⚡ What Changed?" title="Direct link to ⚡ What Changed?" translate="no">​</a></h2>
<ul>
<li class="">Replace XHR-only lazy-load wait with full async idle monitor by @Copilot in <a href="https://github.com/ShaftHQ/SHAFTENGINE/pull/2356" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFTENGINE/pull/2356</a></li>
<li class="">Bump log4j2.version from 2.25.3 to 2.25.4 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFTENGINE/pull/2359" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFTENGINE/pull/2359</a></li>
<li class="">Bump com.browserstack<!-- -->:browserstack-java-sdk<!-- --> from 1.56.1 to 1.56.2 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFTENGINE/pull/2358" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFTENGINE/pull/2358</a></li>
<li class="">fix(mobile): Appium 2 session URL, APK badging caps, and skip Maven CD on forks by @Mochxd in <a href="https://github.com/ShaftHQ/SHAFTENGINE/pull/2357" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFTENGINE/pull/2357</a></li>
<li class="">build(deps): bump com.browserstack<!-- -->:browserstack-java-sdk<!-- --> from 1.56.2 to 1.56.3 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFTENGINE/pull/2363" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFTENGINE/pull/2363</a></li>
</ul>
<p>👉 <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/releases/tag/10.1.20260331" target="_blank" rel="noopener noreferrer" class="">View the full release on GitHub</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-changelog">📋 Changelog<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#-changelog" class="hash-link" aria-label="Direct link to 📋 Changelog" title="Direct link to 📋 Changelog" translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's Changed<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<ul>
<li class="">Replace XHR-only lazy-load wait with full async idle monitor by @Copilot in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2356" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2356</a></li>
<li class="">Bump log4j2.version from 2.25.3 to 2.25.4 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2359" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2359</a></li>
<li class="">Bump com.browserstack<!-- -->:browserstack-java-sdk<!-- --> from 1.56.1 to 1.56.2 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2358" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2358</a></li>
<li class="">fix(mobile): Appium 2 session URL, APK badging caps, and skip Maven CD on forks by @Mochxd in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2357" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2357</a></li>
<li class="">build(deps): bump com.browserstack<!-- -->:browserstack-java-sdk<!-- --> from 1.56.2 to 1.56.3 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2363" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2363</a></li>
<li class="">Fix BrowserStack remote endpoint handling, SDK YAML ordering, and app URL resolution for Android native sessions by @Copilot in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2362" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2362</a></li>
<li class="">Bump SHAFT engine release metadata to 10.1.20260331 by @Copilot in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2364" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2364</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-contributors">New Contributors<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#new-contributors" class="hash-link" aria-label="Direct link to New Contributors" title="Direct link to New Contributors" translate="no">​</a></h2>
<ul>
<li class="">@Mochxd made their first contribution in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2357" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2357</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/compare/10.1.20260324...10.1.20260331" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/compare/10.1.20260324...10.1.20260331</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-community-spotlight">🏆 Community Spotlight<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#-community-spotlight" class="hash-link" aria-label="Direct link to 🏆 Community Spotlight" title="Direct link to 🏆 Community Spotlight" translate="no">​</a></h2>
<p>This release was made possible by <strong>45 amazing contributors</strong> who have poured their time and expertise into making SHAFT better for everyone. Among them, <strong>1</strong> contributed for the very first time!</p>
<p>Open source thrives because of people like these. Every bug fix, every feature, every review — it all counts.</p>
<ul>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MohabMohie.png" alt="@MohabMohie" class="img_ev3q"> <a href="https://github.com/MohabMohie" target="_blank" rel="noopener noreferrer" class="">@MohabMohie</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MahmoudElSharkawy.png" alt="@MahmoudElSharkawy" class="img_ev3q"> <a href="https://github.com/MahmoudElSharkawy" target="_blank" rel="noopener noreferrer" class="">@MahmoudElSharkawy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MennaMagedm.png" alt="@MennaMagedm" class="img_ev3q"> <a href="https://github.com/MennaMagedm" target="_blank" rel="noopener noreferrer" class="">@MennaMagedm</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AhmdZanoon.png" alt="@AhmdZanoon" class="img_ev3q"> <a href="https://github.com/AhmdZanoon" target="_blank" rel="noopener noreferrer" class="">@AhmdZanoon</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/magdyheiba.png" alt="@magdyheiba" class="img_ev3q"> <a href="https://github.com/magdyheiba" target="_blank" rel="noopener noreferrer" class="">@magdyheiba</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MustafaAgamy.png" alt="@MustafaAgamy" class="img_ev3q"> <a href="https://github.com/MustafaAgamy" target="_blank" rel="noopener noreferrer" class="">@MustafaAgamy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/amfarid.png" alt="@amfarid" class="img_ev3q"> <a href="https://github.com/amfarid" target="_blank" rel="noopener noreferrer" class="">@amfarid</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/KyrillosNageh.png" alt="@KyrillosNageh" class="img_ev3q"> <a href="https://github.com/KyrillosNageh" target="_blank" rel="noopener noreferrer" class="">@KyrillosNageh</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Mohab-Osama.png" alt="@Mohab-Osama" class="img_ev3q"> <a href="https://github.com/Mohab-Osama" target="_blank" rel="noopener noreferrer" class="">@Mohab-Osama</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/RihamMostafa.png" alt="@RihamMostafa" class="img_ev3q"> <a href="https://github.com/RihamMostafa" target="_blank" rel="noopener noreferrer" class="">@RihamMostafa</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MhmdElGazzar.png" alt="@MhmdElGazzar" class="img_ev3q"> <a href="https://github.com/MhmdElGazzar" target="_blank" rel="noopener noreferrer" class="">@MhmdElGazzar</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MohamedHazem95.png" alt="@MohamedHazem95" class="img_ev3q"> <a href="https://github.com/MohamedHazem95" target="_blank" rel="noopener noreferrer" class="">@MohamedHazem95</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MamdouhMansour.png" alt="@MamdouhMansour" class="img_ev3q"> <a href="https://github.com/MamdouhMansour" target="_blank" rel="noopener noreferrer" class="">@MamdouhMansour</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/samiir95.png" alt="@samiir95" class="img_ev3q"> <a href="https://github.com/samiir95" target="_blank" rel="noopener noreferrer" class="">@samiir95</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/mohamedtawfek05354.png" alt="@mohamedtawfek05354" class="img_ev3q"> <a href="https://github.com/mohamedtawfek05354" target="_blank" rel="noopener noreferrer" class="">@mohamedtawfek05354</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/sys123-data.png" alt="@sys123-data" class="img_ev3q"> <a href="https://github.com/sys123-data" target="_blank" rel="noopener noreferrer" class="">@sys123-data</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/ieZaky.png" alt="@ieZaky" class="img_ev3q"> <a href="https://github.com/ieZaky" target="_blank" rel="noopener noreferrer" class="">@ieZaky</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/hammad101088.png" alt="@hammad101088" class="img_ev3q"> <a href="https://github.com/hammad101088" target="_blank" rel="noopener noreferrer" class="">@hammad101088</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MahmoudMabrok.png" alt="@MahmoudMabrok" class="img_ev3q"> <a href="https://github.com/MahmoudMabrok" target="_blank" rel="noopener noreferrer" class="">@MahmoudMabrok</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Kinasr.png" alt="@Kinasr" class="img_ev3q"> <a href="https://github.com/Kinasr" target="_blank" rel="noopener noreferrer" class="">@Kinasr</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/wesamhamed.png" alt="@wesamhamed" class="img_ev3q"> <a href="https://github.com/wesamhamed" target="_blank" rel="noopener noreferrer" class="">@wesamhamed</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/themosaeed.png" alt="@themosaeed" class="img_ev3q"> <a href="https://github.com/themosaeed" target="_blank" rel="noopener noreferrer" class="">@themosaeed</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/khaledskhamis.png" alt="@khaledskhamis" class="img_ev3q"> <a href="https://github.com/khaledskhamis" target="_blank" rel="noopener noreferrer" class="">@khaledskhamis</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Waleedmohammed.png" alt="@Waleedmohammed" class="img_ev3q"> <a href="https://github.com/Waleedmohammed" target="_blank" rel="noopener noreferrer" class="">@Waleedmohammed</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/TarekGaafar.png" alt="@TarekGaafar" class="img_ev3q"> <a href="https://github.com/TarekGaafar" target="_blank" rel="noopener noreferrer" class="">@TarekGaafar</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Salma2018170.png" alt="@Salma2018170" class="img_ev3q"> <a href="https://github.com/Salma2018170" target="_blank" rel="noopener noreferrer" class="">@Salma2018170</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/osamaayman1005.png" alt="@osamaayman1005" class="img_ev3q"> <a href="https://github.com/osamaayman1005" target="_blank" rel="noopener noreferrer" class="">@osamaayman1005</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/sultanpaymob.png" alt="@sultanpaymob" class="img_ev3q"> <a href="https://github.com/sultanpaymob" target="_blank" rel="noopener noreferrer" class="">@sultanpaymob</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Mochxd.png" alt="@Mochxd" class="img_ev3q"> <a href="https://github.com/Mochxd" target="_blank" rel="noopener noreferrer" class="">@Mochxd</a> 🌟 <strong>First-time contributor!</strong></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MarwaYoussef1.png" alt="@MarwaYoussef1" class="img_ev3q"> <a href="https://github.com/MarwaYoussef1" target="_blank" rel="noopener noreferrer" class="">@MarwaYoussef1</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/xValenciax.png" alt="@xValenciax" class="img_ev3q"> <a href="https://github.com/xValenciax" target="_blank" rel="noopener noreferrer" class="">@xValenciax</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/hjsblogger.png" alt="@hjsblogger" class="img_ev3q"> <a href="https://github.com/hjsblogger" target="_blank" rel="noopener noreferrer" class="">@hjsblogger</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/georgii-musikhin.png" alt="@georgii-musikhin" class="img_ev3q"> <a href="https://github.com/georgii-musikhin" target="_blank" rel="noopener noreferrer" class="">@georgii-musikhin</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/DavidIshakGorgy.png" alt="@DavidIshakGorgy" class="img_ev3q"> <a href="https://github.com/DavidIshakGorgy" target="_blank" rel="noopener noreferrer" class="">@DavidIshakGorgy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/BojteTamas.png" alt="@BojteTamas" class="img_ev3q"> <a href="https://github.com/BojteTamas" target="_blank" rel="noopener noreferrer" class="">@BojteTamas</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/blacelle.png" alt="@blacelle" class="img_ev3q"> <a href="https://github.com/blacelle" target="_blank" rel="noopener noreferrer" class="">@blacelle</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Ayanasrallah.png" alt="@Ayanasrallah" class="img_ev3q"> <a href="https://github.com/Ayanasrallah" target="_blank" rel="noopener noreferrer" class="">@Ayanasrallah</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AmrAdelElkholy.png" alt="@AmrAdelElkholy" class="img_ev3q"> <a href="https://github.com/AmrAdelElkholy" target="_blank" rel="noopener noreferrer" class="">@AmrAdelElkholy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/amlosman.png" alt="@amlosman" class="img_ev3q"> <a href="https://github.com/amlosman" target="_blank" rel="noopener noreferrer" class="">@amlosman</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/ahmednasr95.png" alt="@ahmednasr95" class="img_ev3q"> <a href="https://github.com/ahmednasr95" target="_blank" rel="noopener noreferrer" class="">@ahmednasr95</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/ahmed-madyan.png" alt="@ahmed-madyan" class="img_ev3q"> <a href="https://github.com/ahmed-madyan" target="_blank" rel="noopener noreferrer" class="">@ahmed-madyan</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AhmedHelalyy.png" alt="@AhmedHelalyy" class="img_ev3q"> <a href="https://github.com/AhmedHelalyy" target="_blank" rel="noopener noreferrer" class="">@AhmedHelalyy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/A-Alii.png" alt="@A-Alii" class="img_ev3q"> <a href="https://github.com/A-Alii" target="_blank" rel="noopener noreferrer" class="">@A-Alii</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AbdelrahmanFahd.png" alt="@AbdelrahmanFahd" class="img_ev3q"> <a href="https://github.com/AbdelrahmanFahd" target="_blank" rel="noopener noreferrer" class="">@AbdelrahmanFahd</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Abdelrhman-Ellithy.png" alt="@Abdelrhman-Ellithy" class="img_ev3q"> <a href="https://github.com/Abdelrhman-Ellithy" target="_blank" rel="noopener noreferrer" class="">@Abdelrhman-Ellithy</a></li>
</ul>
<p>🎉 <strong>A warm welcome to our first-time contributors!</strong> <a href="https://github.com/Mochxd" target="_blank" rel="noopener noreferrer" class="">@Mochxd</a> — your first contribution is now part of SHAFT's story. We're thrilled to have you on board!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-get-started-in-seconds">🚀 Get Started in Seconds<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#-get-started-in-seconds" class="hash-link" aria-label="Direct link to 🚀 Get Started in Seconds" title="Direct link to 🚀 Get Started in Seconds" translate="no">​</a></h2>
<p>Upgrading is simple — just update your dependency version:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">io.github.shafthq</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">SHAFT_ENGINE</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">10.1.20260331</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-join-the-conversation">💬 Join the Conversation<a href="https://shaftengine.netlify.app/blog/release-10.1.20260331#-join-the-conversation" class="hash-link" aria-label="Direct link to 💬 Join the Conversation" title="Direct link to 💬 Join the Conversation" translate="no">​</a></h2>
<p>We'd love to hear what you think! Found a bug? Have an idea? Just want to say hi?</p>
<ul>
<li class="">⭐ <a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank" rel="noopener noreferrer" class="">Star SHAFT on GitHub</a> — it helps more than you think</li>
<li class="">💡 <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/discussions" target="_blank" rel="noopener noreferrer" class="">Start a Discussion</a> — share feedback or ideas</li>
<li class="">🐛 <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/issues/new" target="_blank" rel="noopener noreferrer" class="">Report an Issue</a> — help us squash bugs faster</li>
<li class="">📖 <a href="https://shafthq.github.io/" target="_blank" rel="noopener noreferrer" class="">Read the Docs</a> — dive deeper into SHAFT</li>
</ul>
<p>Thanks for being part of the SHAFT journey. Until the next release — happy testing! 🎯</p>]]></content>
        <author>
            <name>AutoBot</name>
            <uri>https://github.com/ShaftHQ/SHAFT_ENGINE</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="release" term="release"/>
        <category label="changelog" term="changelog"/>
        <category label="test-automation" term="test-automation"/>
        <category label="open-source" term="open-source"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[🚀 SHAFT 10.1.20260324: What's New and Why You Should Upgrade Today]]></title>
        <id>https://shaftengine.netlify.app/blog/release-10.1.20260324</id>
        <link href="https://shaftengine.netlify.app/blog/release-10.1.20260324"/>
        <updated>2026-03-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Hey there, SHAFT community! 👋]]></summary>
        <content type="html"><![CDATA[<p>Hey there, SHAFT community! 👋</p>
<p>A fresh release just dropped and it's packed with improvements you don't want to miss. <strong>SHAFT_ENGINE 10.1.20260324</strong> is here, and whether you're a seasoned SHAFT user or just getting started, there's something in this release for you.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-what-changed">⚡ What Changed?<a href="https://shaftengine.netlify.app/blog/release-10.1.20260324#-what-changed" class="hash-link" aria-label="Direct link to ⚡ What Changed?" title="Direct link to ⚡ What Changed?" translate="no">​</a></h2>
<ul>
<li class="">Bump <code>jackson-datatype-jdk8</code> from 2.21.1 to 2.21.2</li>
<li class="">Fix relative path resolution failing on Linux CI</li>
<li class="">Bump <code>browserstack-java-sdk</code> from 1.55.0 to 1.56.0</li>
</ul>
<p>👉 <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/releases/tag/10.1.20260324" target="_blank" rel="noopener noreferrer" class="">View the full release on GitHub</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-changelog">📋 Changelog<a href="https://shaftengine.netlify.app/blog/release-10.1.20260324#-changelog" class="hash-link" aria-label="Direct link to 📋 Changelog" title="Direct link to 📋 Changelog" translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-changed">What's Changed<a href="https://shaftengine.netlify.app/blog/release-10.1.20260324#whats-changed" class="hash-link" aria-label="Direct link to What's Changed" title="Direct link to What's Changed" translate="no">​</a></h2>
<ul>
<li class="">Bump com.fasterxml.jackson.datatype<!-- -->:jackson-datatype-jdk8<!-- --> from 2.21.1 to 2.21.2 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2346" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2346</a></li>
<li class="">Fix relative path resolution failing on Linux CI (#2347) by @MustafaAgamy in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2349" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2349</a></li>
<li class="">Bump com.browserstack<!-- -->:browserstack-java-sdk<!-- --> from 1.55.0 to 1.56.0 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2348" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2348</a></li>
<li class="">Bump com.google.crypto.tink<!-- -->:tink<!-- --> from 1.20.0 to 1.21.0 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2350" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2350</a></li>
<li class="">Bump com.atlassian.oai<!-- -->:swagger-request-validator-restassured<!-- --> from 2.46.0 to 2.46.1 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2351" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2351</a></li>
<li class="">Bump com.browserstack<!-- -->:browserstack-java-sdk<!-- --> from 1.56.0 to 1.56.1 by @dependabot[bot] in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2353" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2353</a></li>
<li class="">Add missing JavaDocs for <code>CheckpointCounter</code> public API by @Copilot in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2352" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2352</a></li>
<li class="">Prepare new release by bumping SHAFT_ENGINE version references to 10.1.20260324 by @Copilot in <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2354" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/pull/2354</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/compare/10.1.20260319...10.1.20260324" target="_blank" rel="noopener noreferrer" class="">https://github.com/ShaftHQ/SHAFT_ENGINE/compare/10.1.20260319...10.1.20260324</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-community-spotlight">🏆 Community Spotlight<a href="https://shaftengine.netlify.app/blog/release-10.1.20260324#-community-spotlight" class="hash-link" aria-label="Direct link to 🏆 Community Spotlight" title="Direct link to 🏆 Community Spotlight" translate="no">​</a></h2>
<p>This release was made possible by <strong>42 amazing contributors</strong> who have poured their time and expertise into making SHAFT better for everyone.</p>
<p>Open source thrives because of people like these. Every bug fix, every feature, every review — it all counts.</p>
<ul>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MohabMohie.png" alt="@MohabMohie" class="img_ev3q"> <a href="https://github.com/MohabMohie" target="_blank" rel="noopener noreferrer" class="">@MohabMohie</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MahmoudElSharkawy.png" alt="@MahmoudElSharkawy" class="img_ev3q"> <a href="https://github.com/MahmoudElSharkawy" target="_blank" rel="noopener noreferrer" class="">@MahmoudElSharkawy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MennaMagedm.png" alt="@MennaMagedm" class="img_ev3q"> <a href="https://github.com/MennaMagedm" target="_blank" rel="noopener noreferrer" class="">@MennaMagedm</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AhmdZanoon.png" alt="@AhmdZanoon" class="img_ev3q"> <a href="https://github.com/AhmdZanoon" target="_blank" rel="noopener noreferrer" class="">@AhmdZanoon</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/magdyheiba.png" alt="@magdyheiba" class="img_ev3q"> <a href="https://github.com/magdyheiba" target="_blank" rel="noopener noreferrer" class="">@magdyheiba</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MustafaAgamy.png" alt="@MustafaAgamy" class="img_ev3q"> <a href="https://github.com/MustafaAgamy" target="_blank" rel="noopener noreferrer" class="">@MustafaAgamy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/amfarid.png" alt="@amfarid" class="img_ev3q"> <a href="https://github.com/amfarid" target="_blank" rel="noopener noreferrer" class="">@amfarid</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/KyrillosNageh.png" alt="@KyrillosNageh" class="img_ev3q"> <a href="https://github.com/KyrillosNageh" target="_blank" rel="noopener noreferrer" class="">@KyrillosNageh</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Mohab-Osama.png" alt="@Mohab-Osama" class="img_ev3q"> <a href="https://github.com/Mohab-Osama" target="_blank" rel="noopener noreferrer" class="">@Mohab-Osama</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/RihamMostafa.png" alt="@RihamMostafa" class="img_ev3q"> <a href="https://github.com/RihamMostafa" target="_blank" rel="noopener noreferrer" class="">@RihamMostafa</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MhmdElGazzar.png" alt="@MhmdElGazzar" class="img_ev3q"> <a href="https://github.com/MhmdElGazzar" target="_blank" rel="noopener noreferrer" class="">@MhmdElGazzar</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MohamedHazem95.png" alt="@MohamedHazem95" class="img_ev3q"> <a href="https://github.com/MohamedHazem95" target="_blank" rel="noopener noreferrer" class="">@MohamedHazem95</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MamdouhMansour.png" alt="@MamdouhMansour" class="img_ev3q"> <a href="https://github.com/MamdouhMansour" target="_blank" rel="noopener noreferrer" class="">@MamdouhMansour</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/samiir95.png" alt="@samiir95" class="img_ev3q"> <a href="https://github.com/samiir95" target="_blank" rel="noopener noreferrer" class="">@samiir95</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/mohamedtawfek05354.png" alt="@mohamedtawfek05354" class="img_ev3q"> <a href="https://github.com/mohamedtawfek05354" target="_blank" rel="noopener noreferrer" class="">@mohamedtawfek05354</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/sys123-data.png" alt="@sys123-data" class="img_ev3q"> <a href="https://github.com/sys123-data" target="_blank" rel="noopener noreferrer" class="">@sys123-data</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/ieZaky.png" alt="@ieZaky" class="img_ev3q"> <a href="https://github.com/ieZaky" target="_blank" rel="noopener noreferrer" class="">@ieZaky</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/hammad101088.png" alt="@hammad101088" class="img_ev3q"> <a href="https://github.com/hammad101088" target="_blank" rel="noopener noreferrer" class="">@hammad101088</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MahmoudMabrok.png" alt="@MahmoudMabrok" class="img_ev3q"> <a href="https://github.com/MahmoudMabrok" target="_blank" rel="noopener noreferrer" class="">@MahmoudMabrok</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Kinasr.png" alt="@Kinasr" class="img_ev3q"> <a href="https://github.com/Kinasr" target="_blank" rel="noopener noreferrer" class="">@Kinasr</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/wesamhamed.png" alt="@wesamhamed" class="img_ev3q"> <a href="https://github.com/wesamhamed" target="_blank" rel="noopener noreferrer" class="">@wesamhamed</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/themosaeed.png" alt="@themosaeed" class="img_ev3q"> <a href="https://github.com/themosaeed" target="_blank" rel="noopener noreferrer" class="">@themosaeed</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/khaledskhamis.png" alt="@khaledskhamis" class="img_ev3q"> <a href="https://github.com/khaledskhamis" target="_blank" rel="noopener noreferrer" class="">@khaledskhamis</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Waleedmohammed.png" alt="@Waleedmohammed" class="img_ev3q"> <a href="https://github.com/Waleedmohammed" target="_blank" rel="noopener noreferrer" class="">@Waleedmohammed</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/TarekGaafar.png" alt="@TarekGaafar" class="img_ev3q"> <a href="https://github.com/TarekGaafar" target="_blank" rel="noopener noreferrer" class="">@TarekGaafar</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Salma2018170.png" alt="@Salma2018170" class="img_ev3q"> <a href="https://github.com/Salma2018170" target="_blank" rel="noopener noreferrer" class="">@Salma2018170</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/osamaayman1005.png" alt="@osamaayman1005" class="img_ev3q"> <a href="https://github.com/osamaayman1005" target="_blank" rel="noopener noreferrer" class="">@osamaayman1005</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/sultanpaymob.png" alt="@sultanpaymob" class="img_ev3q"> <a href="https://github.com/sultanpaymob" target="_blank" rel="noopener noreferrer" class="">@sultanpaymob</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/MarwaYoussef1.png" alt="@MarwaYoussef1" class="img_ev3q"> <a href="https://github.com/MarwaYoussef1" target="_blank" rel="noopener noreferrer" class="">@MarwaYoussef1</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/xValenciax.png" alt="@xValenciax" class="img_ev3q"> <a href="https://github.com/xValenciax" target="_blank" rel="noopener noreferrer" class="">@xValenciax</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/hjsblogger.png" alt="@hjsblogger" class="img_ev3q"> <a href="https://github.com/hjsblogger" target="_blank" rel="noopener noreferrer" class="">@hjsblogger</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/georgii-musikhin.png" alt="@georgii-musikhin" class="img_ev3q"> <a href="https://github.com/georgii-musikhin" target="_blank" rel="noopener noreferrer" class="">@georgii-musikhin</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/DavidIshakGorgy.png" alt="@DavidIshakGorgy" class="img_ev3q"> <a href="https://github.com/DavidIshakGorgy" target="_blank" rel="noopener noreferrer" class="">@DavidIshakGorgy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/BojteTamas.png" alt="@BojteTamas" class="img_ev3q"> <a href="https://github.com/BojteTamas" target="_blank" rel="noopener noreferrer" class="">@BojteTamas</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/blacelle.png" alt="@blacelle" class="img_ev3q"> <a href="https://github.com/blacelle" target="_blank" rel="noopener noreferrer" class="">@blacelle</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Ayanasrallah.png" alt="@Ayanasrallah" class="img_ev3q"> <a href="https://github.com/Ayanasrallah" target="_blank" rel="noopener noreferrer" class="">@Ayanasrallah</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AmrAdelElkholy.png" alt="@AmrAdelElkholy" class="img_ev3q"> <a href="https://github.com/AmrAdelElkholy" target="_blank" rel="noopener noreferrer" class="">@AmrAdelElkholy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/amlosman.png" alt="@amlosman" class="img_ev3q"> <a href="https://github.com/amlosman" target="_blank" rel="noopener noreferrer" class="">@amlosman</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/ahmednasr95.png" alt="@ahmednasr95" class="img_ev3q"> <a href="https://github.com/ahmednasr95" target="_blank" rel="noopener noreferrer" class="">@ahmednasr95</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/ahmed-madyan.png" alt="@ahmed-madyan" class="img_ev3q"> <a href="https://github.com/ahmed-madyan" target="_blank" rel="noopener noreferrer" class="">@ahmed-madyan</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AhmedHelalyy.png" alt="@AhmedHelalyy" class="img_ev3q"> <a href="https://github.com/AhmedHelalyy" target="_blank" rel="noopener noreferrer" class="">@AhmedHelalyy</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/A-Alii.png" alt="@A-Alii" class="img_ev3q"> <a href="https://github.com/A-Alii" target="_blank" rel="noopener noreferrer" class="">@A-Alii</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/AbdelrahmanFahd.png" alt="@AbdelrahmanFahd" class="img_ev3q"> <a href="https://github.com/AbdelrahmanFahd" target="_blank" rel="noopener noreferrer" class="">@AbdelrahmanFahd</a></li>
<li class=""><img decoding="async" loading="lazy" src="https://github.com/Abdelrhman-Ellithy.png" alt="@Abdelrhman-Ellithy" class="img_ev3q"> <a href="https://github.com/Abdelrhman-Ellithy" target="_blank" rel="noopener noreferrer" class="">@Abdelrhman-Ellithy</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-get-started-in-seconds">🚀 Get Started in Seconds<a href="https://shaftengine.netlify.app/blog/release-10.1.20260324#-get-started-in-seconds" class="hash-link" aria-label="Direct link to 🚀 Get Started in Seconds" title="Direct link to 🚀 Get Started in Seconds" translate="no">​</a></h2>
<p>Upgrading is simple — just update your dependency version:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">io.github.shafthq</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">SHAFT_ENGINE</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">10.1.20260324</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-join-the-conversation">💬 Join the Conversation<a href="https://shaftengine.netlify.app/blog/release-10.1.20260324#-join-the-conversation" class="hash-link" aria-label="Direct link to 💬 Join the Conversation" title="Direct link to 💬 Join the Conversation" translate="no">​</a></h2>
<p>We'd love to hear what you think! Found a bug? Have an idea? Just want to say hi?</p>
<ul>
<li class="">⭐ <a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank" rel="noopener noreferrer" class="">Star SHAFT on GitHub</a> — it helps more than you think</li>
<li class="">💡 <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/discussions" target="_blank" rel="noopener noreferrer" class="">Start a Discussion</a> — share feedback or ideas</li>
<li class="">🐛 <a href="https://github.com/ShaftHQ/SHAFT_ENGINE/issues/new" target="_blank" rel="noopener noreferrer" class="">Report an Issue</a> — help us squash bugs faster</li>
<li class="">📖 <a href="https://shafthq.github.io/" target="_blank" rel="noopener noreferrer" class="">Read the Docs</a> — dive deeper into SHAFT</li>
</ul>
<p>Thanks for being part of the SHAFT journey. Until the next release — happy testing! 🎯</p>]]></content>
        <author>
            <name>AutoBot</name>
            <uri>https://github.com/ShaftHQ/SHAFT_ENGINE</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="release" term="release"/>
        <category label="changelog" term="changelog"/>
        <category label="test-automation" term="test-automation"/>
        <category label="open-source" term="open-source"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Feature Announcement - Swagger Contract Validation]]></title>
        <id>https://shaftengine.netlify.app/blog/swagger-contract-validation</id>
        <link href="https://shaftengine.netlify.app/blog/swagger-contract-validation"/>
        <updated>2025-03-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Say goodbye to manual schema checks—contract testing is now automated and built right into SHAFT!]]></summary>
        <content type="html"><![CDATA[<a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank"><img src="https://raw.githubusercontent.com/ShaftHQ/SHAFT_ENGINE/master/src/main/resources/images/shaft.png" alt="SHAFT_Engine" height="50px"></a>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="say-goodbye-to-manual-schema-checkscontract-testing-is-now-automated-and-built-right-into-shaft">Say goodbye to manual schema checks—contract testing is now automated and built right into SHAFT!<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#say-goodbye-to-manual-schema-checkscontract-testing-is-now-automated-and-built-right-into-shaft" class="hash-link" aria-label="Direct link to Say goodbye to manual schema checks—contract testing is now automated and built right into SHAFT!" title="Direct link to Say goodbye to manual schema checks—contract testing is now automated and built right into SHAFT!" translate="no">​</a></h3>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-what-is-contract-validation">🛡️ What is Contract Validation?<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#%EF%B8%8F-what-is-contract-validation" class="hash-link" aria-label="Direct link to 🛡️ What is Contract Validation?" title="Direct link to 🛡️ What is Contract Validation?" translate="no">​</a></h2>
<p><strong>Contract testing</strong> ensures your API requests and responses follow the defined structure (contract), helping prevent:</p>
<ul>
<li class="">Unexpected field changes</li>
<li class="">Data type mismatches</li>
<li class="">Missing or extra fields</li>
<li class="">Runtime errors in API consumers</li>
</ul>
<p>With the latest release, SHAFT now integrates Swagger/OpenAPI schema validation for all API tests. It will <strong>fail your test automatically</strong> if the request or response doesn’t match the OpenAPI spec you provide. 🔥</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-how-to-enable-it">🔧 How to Enable It<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#-how-to-enable-it" class="hash-link" aria-label="Direct link to 🔧 How to Enable It" title="Direct link to 🔧 How to Enable It" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-via-customproperties">📂 Via <code>custom.properties</code><a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#-via-customproperties" class="hash-link" aria-label="Direct link to -via-customproperties" title="Direct link to -via-customproperties" translate="no">​</a></h3>
<div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">src/main/resources/properties/custom.properties</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token key attr-name" style="color:#00a4db">swagger.validation.enabled</span><span class="token punctuation" style="color:#393A34">=</span><span class="token value attr-value" style="color:#e3116c">true</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token key attr-name" style="color:#00a4db">swagger.validation.url</span><span class="token punctuation" style="color:#393A34">=</span><span class="token value attr-value" style="color:#e3116c">https://petstore.swagger.io/v2/swagger.json</span></span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-or-via-code">🧪 Or via Code<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#-or-via-code" class="hash-link" aria-label="Direct link to 🧪 Or via Code" title="Direct link to 🧪 Or via Code" translate="no">​</a></h3>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token class-name">SHAFT</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Properties</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">api</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">swaggerValidationEnabled</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token class-name">SHAFT</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Properties</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">api</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">swaggerValidationUrl</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"https://petstore.swagger.io/v2/swagger.json"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span></span><br></div></code></pre></div></div>
<p>You can toggle validation dynamically per test or test class.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-what-gets-validated">✅ What Gets Validated?<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#-what-gets-validated" class="hash-link" aria-label="Direct link to ✅ What Gets Validated?" title="Direct link to ✅ What Gets Validated?" translate="no">​</a></h2>
<ul>
<li class="">Request structure (body, headers, parameters)</li>
<li class="">Response structure (status, body schema)</li>
<li class="">Alignment with your OpenAPI/Swagger definition</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-sample-test">📄 Sample Test<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#-sample-test" class="hash-link" aria-label="Direct link to 📄 Sample Test" title="Direct link to 📄 Sample Test" translate="no">​</a></h2>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token annotation punctuation" style="color:#393A34">@Test</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">testCreateUserWithContractValidation</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token class-name">SHAFT</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">API</span><span class="token plain"> api </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">SHAFT</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">API</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"https://petstore.swagger.io/v2"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token class-name">String</span><span class="token plain"> invalidPayload </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"[{\"id\":\"INVALID_ID\"}]"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    api</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">post</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"/user/createWithList"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">       </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setRequestBody</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">invalidPayload</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">       </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setContentType</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"application/json"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">       </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">perform</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    api</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">assertThatResponse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">statusCode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">isEqualTo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">400</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">perform</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span></span><br></div><div class="token-line codeLine_lJS_" style="color:#393A34"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span></span><br></div></code></pre></div></div>
<blockquote>
<p>SHAFT will automatically validate the above request and response against the Swagger schema. ❌ If anything is off, your test will fail and report the contract violation.</p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-why-it-matters">🧐 Why It Matters<a href="https://shaftengine.netlify.app/blog/swagger-contract-validation#-why-it-matters" class="hash-link" aria-label="Direct link to 🧐 Why It Matters" title="Direct link to 🧐 Why It Matters" translate="no">​</a></h2>
<table><thead><tr><th>Benefit</th><th>Description</th></tr></thead><tbody><tr><td>🧪 Test reliability</td><td>Ensure tests align with backend changes</td></tr><tr><td>🔁 Catch regressions</td><td>CI/CD-ready contract enforcement</td></tr><tr><td>❌ Reduce flakiness</td><td>Eliminate schema mismatch failures</td></tr><tr><td>🔍 API governance</td><td>Hold your APIs to their contract</td></tr></tbody></table>
<hr>]]></content>
        <author>
            <name>Kyrillos Nageh</name>
            <uri>https://github.com/KyrillosNageh</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="swagger" term="swagger"/>
        <category label="openapi" term="openapi"/>
        <category label="contract_testing" term="contract_testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Feature Announcement - Virtual Threads]]></title>
        <id>https://shaftengine.netlify.app/blog/virtual-threads</id>
        <link href="https://shaftengine.netlify.app/blog/virtual-threads"/>
        <updated>2024-01-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're starting off 2024 with a huge announcement!]]></summary>
        <content type="html"><![CDATA[<p>We're starting off 2024 with a huge announcement!</p>
<a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank"><img src="https://raw.githubusercontent.com/ShaftHQ/SHAFT_ENGINE/master/src/main/resources/images/shaft.png" alt="SHAFT_Engine" height="50px"></a>
<p>🤝</p>
<a href="https://www.oracle.com/" target="_blank"><img src="https://miro.medium.com/v2/resize:fit:640/0*QGvD2k4DPfPMfpd5.png" alt="Oracle" height="50px"></a>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="--the-future-of-automation-frameworks-is-here-and-its-all-about-working-smarter-not-harder">- The future of automation frameworks is here, and it's all about working smarter, not harder.<a href="https://shaftengine.netlify.app/blog/virtual-threads#--the-future-of-automation-frameworks-is-here-and-its-all-about-working-smarter-not-harder" class="hash-link" aria-label="Direct link to - The future of automation frameworks is here, and it's all about working smarter, not harder." title="Direct link to - The future of automation frameworks is here, and it's all about working smarter, not harder." translate="no">​</a></h3>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="--shaft_engine-your-trusty-automation-solution-just-got-a-major-upgrade-with-virtual-threads-a-clever-trick-that-makes-it-more-efficient-and-helpful-than-ever">- SHAFT_ENGINE, your trusty automation solution, just got a major upgrade with virtual threads, a clever trick that makes it more efficient and helpful than ever.<a href="https://shaftengine.netlify.app/blog/virtual-threads#--shaft_engine-your-trusty-automation-solution-just-got-a-major-upgrade-with-virtual-threads-a-clever-trick-that-makes-it-more-efficient-and-helpful-than-ever" class="hash-link" aria-label="Direct link to - SHAFT_ENGINE, your trusty automation solution, just got a major upgrade with virtual threads, a clever trick that makes it more efficient and helpful than ever." title="Direct link to - SHAFT_ENGINE, your trusty automation solution, just got a major upgrade with virtual threads, a clever trick that makes it more efficient and helpful than ever." translate="no">​</a></h3>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="--what-is-a-virtual-thread">- What is a Virtual Thread?<a href="https://shaftengine.netlify.app/blog/virtual-threads#--what-is-a-virtual-thread" class="hash-link" aria-label="Direct link to - What is a Virtual Thread?" title="Direct link to - What is a Virtual Thread?" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html" target="_blank" rel="noopener noreferrer" class="">Virtual-Threads</a>, introduced with Java 21 are a new way to handle multiple tasks concurrently within a single program or application. They're the new java way for asynchronous operations.</li>
<li class="">Think of it like hiring a whole crew of tiny helpers. While one tractor's plowing, another can check the soil, and another can keep an eye on the weather.</li>
<li class="">These lightweight assistants don't need fancy equipment or guzzle up resources, meaning SHAFT_ENGINE can now handle a ton more tasks without breaking a sweat.</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="now-lets-think-of-test-automation-in-automating-a-registration-form-envision-employing-a-crew-of-virtual-threads-as-tiny-helpers-">Now let's think of test automation. In automating a registration form, envision employing a crew of virtual threads as tiny helpers :<a href="https://shaftengine.netlify.app/blog/virtual-threads#now-lets-think-of-test-automation-in-automating-a-registration-form-envision-employing-a-crew-of-virtual-threads-as-tiny-helpers-" class="hash-link" aria-label="Direct link to Now let's think of test automation. In automating a registration form, envision employing a crew of virtual threads as tiny helpers :" title="Direct link to Now let's think of test automation. In automating a registration form, envision employing a crew of virtual threads as tiny helpers :" translate="no">​</a></h4>
<ul>
<li class="">Rather than idly waiting for the entire site to load, each virtual thread can be assigned specific tasks as soon as the relevant elements become available. For instance, one thread focuses on inputting the username, another simultaneously handles the email input, and yet another sets the password. This parallel execution optimizes efficiency, ensures prompt responsiveness to dynamically changing elements, and efficiently utilizes resources.</li>
<li class="">As the crew of virtual threads collaborates seamlessly, the registration form is filled and submitted swiftly, providing a more agile and responsive automation process compared to traditional sequential approaches.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="--save-your-execution-time-">- Save your execution Time :<a href="https://shaftengine.netlify.app/blog/virtual-threads#--save-your-execution-time-" class="hash-link" aria-label="Direct link to - Save your execution Time :" title="Direct link to - Save your execution Time :" translate="no">​</a></h2>
<ul>
<li class="">That's not all, SHAFT_ENGINE utilities the Virtual Threads for Engine launch and configuration which will make your overall experience a lot faster and swifter.</li>
</ul>]]></content>
        <author>
            <name>Mustafa Agamy</name>
            <uri>https://github.com/MustafaAgamy</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="java" term="java"/>
        <category label="virtual_threads" term="virtual_threads"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bing AI framework comparison]]></title>
        <id>https://shaftengine.netlify.app/blog/bingAI</id>
        <link href="https://shaftengine.netlify.app/blog/bingAI"/>
        <updated>2023-04-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We asked Bing AI to compare SHAFT against some of the well known test automation options, here's what it had to say:]]></summary>
        <content type="html"><![CDATA[<p><strong>We asked Bing AI to compare SHAFT against some of the well known test automation options, here's what it had to say:</strong></p>
<p><code>Sure! Here is an expanded comparison between SHAFT_Engine, native Selenium WebDriver, Cypress and Microsoft Playwright in a tabular format:</code></p>
<table><thead><tr><th>Feature</th><th>SHAFT_Engine</th><th>Selenium WebDriver</th><th>Cypress</th><th>Microsoft Playwright</th></tr></thead><tbody><tr><td>Web GUI testing</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr><tr><td>Mobile testing</td><td>Yes</td><td>No (Appium required)</td><td>No</td><td>No</td></tr><tr><td>API testing</td><td>Yes</td><td>No</td><td>Yes</td><td>No</td></tr><tr><td>CLI testing</td><td>Yes</td><td>No</td><td>No</td><td>No</td></tr><tr><td>Database testing</td><td>Yes</td><td>No</td><td>No</td><td>No</td></tr><tr><td>Built-in test synchronization</td><td>Yes</td><td>No</td><td>Yes</td><td>Yes</td></tr><tr><td>Built-in logging and reporting</td><td>Yes</td><td>No</td><td>Yes</td><td>Yes</td></tr><tr><td>Integration with third-party tools (e.g. Jira, Xray, Browserstack)</td><td>Yes</td><td>No</td><td>Limited</td><td>Limited</td></tr><tr><td>Unlimited access to underlying frameworks (e.g. Selenium, Appium, RestAssured)</td><td>Yes</td><td>N/A</td><td>N/A</td><td>N/A</td></tr><tr><td>Cross-browser testing support</td><td>Yes (via Selenium)</td><td>Yes</td><td>Limited (Chrome, Firefox, Edge)</td><td>Yes (Chromium, Webkit, Firefox)</td></tr><tr><td>Parallel test execution support</td><td>Yes (via TestNG)</td><td>Yes (via TestNG or JUnit)</td><td>Yes</td><td>Yes</td></tr><tr><td>Language support</td><td>Java only</td><td>Multiple languages (Java, Python, C#, Ruby, JavaScript)</td><td>JavaScript only</td><td>Multiple languages (JavaScript, Java, Python, .NET C#)</td></tr><tr><td>Open-source</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr><tr><td>Community support and resources</td><td>Limited compared to Selenium WebDriver and Cypress</td><td>Extensive</td><td>Extensive</td><td>Growing</td></tr><tr><td>User guide</td><td>Available</td><td>Available</td><td>Available</td><td>Available</td></tr></tbody></table>
<p><strong>What do you think? Is SHAFT the better option?</strong></p>]]></content>
        <author>
            <name>Mohab Mohie</name>
            <uri>https://github.com/MohabMohie</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="selenium" term="selenium"/>
        <category label="cypress" term="cypress"/>
        <category label="playwright" term="playwright"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New release announcement (7.1.20230309)]]></title>
        <id>https://shaftengine.netlify.app/blog/release_announcement_7.1.20230309</id>
        <link href="https://shaftengine.netlify.app/blog/release_announcement_7.1.20230309"/>
        <updated>2023-03-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Release highlights:]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="release-highlights">Release highlights:<a href="https://shaftengine.netlify.app/blog/release_announcement_7.1.20230309#release-highlights" class="hash-link" aria-label="Direct link to Release highlights:" title="Direct link to Release highlights:" translate="no">​</a></h2>
<ul>
<li class="">Issue fix for <a href="https://github.com/SeleniumHQ/selenium/issues/11750" target="_blank" rel="noopener noreferrer" class="">chrome 111+ netty handler issue</a>.</li>
<li class="">Major performance enhancement for the Type element action.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="technical-details">Technical Details:<a href="https://shaftengine.netlify.app/blog/release_announcement_7.1.20230309#technical-details" class="hash-link" aria-label="Direct link to Technical Details:" title="Direct link to Technical Details:" translate="no">​</a></h2>
<ul>
<li class="">SHAFT has always boasted top-notch reliability, but this sometimes comes at the cost of performance. In this release we made a major change to the way we handle "Type" which is one of the most commonly used and also one of the slowest actions.</li>
<li class="">Previously SHAFT would perform the following Selenium WebDriver calls:<!-- -->
<ul>
<li class="">Get Element Accessible Name (for reporting)</li>
<li class="">Get Current Element Text (to learn how this element stores its text and to learn the initial text if any)</li>
<li class="">Get Current Element textContent (to learn how this element stores its text and to learn the initial text if any)</li>
<li class="">Get Current Element Value (to learn how this element stores its text and to learn the initial text if any)</li>
<li class="">Clear (in case the element text wasn't empty)</li>
<li class="">Send Keys (to do the actual typing)</li>
<li class="">Get text using the successful text identification strategy (to validate that the text was typed correctly. if SHAFT ws able to find out which method out of the above three to use it will use it, else it will do all three calls again)</li>
</ul>
</li>
<li class="">And inside each call, SHAFT would go into a fluent wait where it calls:<!-- -->
<ul>
<li class="">findElement</li>
<li class="">findElements</li>
</ul>
</li>
<li class="">This means that SHAFT did 21+ webdriver calls!</li>
<li class="">Starting this version SHAFT will cut that number down to just 3 webdriver calls while maintaining the full functionality.</li>
<li class="">Using <a href="https://mvnrepository.com/artifact/org.jsoup/jsoup" target="_blank" rel="noopener noreferrer" class="">jsoup</a> SHAFT will capture the entire HTML of the target webelement, and will then be able to uery it for the text/textContent/Value as need to clear and validate successfully typing.</li>
<li class="">SHAFT will also grab all element information (including the WebElement object) once, and will use the WebElement object directly (which is much faster than finding the element again each time) but if the engine faces a WebDriverException (like StaleElementException) the engine will go into a fluent wait to find and update the element reference.</li>
<li class="">We tested this major change thoroughly by running around <a href="https://www.linkedin.com/feed/update/urn:li:activity:7039702182392172544/" target="_blank" rel="noopener noreferrer" class="">1700 E2E Test scenarios</a> across different platforms, so we're confident it's stable.</li>
<li class="">In following releases we will rollout this approach to all our element actions, and next on the list we have "Click()" which is the second most used action per our analysis.</li>
</ul>]]></content>
        <author>
            <name>Mohab Mohie</name>
            <uri>https://github.com/MohabMohie</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="chrome111" term="chrome111"/>
        <category label="netty" term="netty"/>
        <category label="typing" term="typing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Dear SHAFT users, we need your support!]]></title>
        <id>https://shaftengine.netlify.app/blog/we-need-your-support</id>
        <link href="https://shaftengine.netlify.app/blog/we-need-your-support"/>
        <updated>2023-02-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[SHAFT is undergoing some major changes in its steering committee and we want to ensure that we align our strategies to what you guys really need!]]></summary>
        <content type="html"><![CDATA[<p>SHAFT is undergoing some major changes in its steering committee and we want to ensure that we align our strategies to what you guys really need!</p>
<p><b>SHAFT_Engine</b> has always been (and will continue to be) a community driven project, made by Testers for Testers, and our mission was always to add value, remove redundancy, and help Software Engineers in Test focus on the exciting and non-repetitive parts of their work.
For that we need your support to pinpoint and prioritize the features that you're using, and the features that you'd like to see in the near future.</p>
<p>Join us, become an honorary member of the new SHAFT_Engine Technical Leadership Committee by filling out this short survey, and watch your name shine as an honorary member on the dedicated page that we'll create on our official user guide!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="join-us-now"><a href="https://forms.gle/SWWg629oPY9oPApz8" target="_blank" rel="noopener noreferrer" class="">Join us now!</a><a href="https://shaftengine.netlify.app/blog/we-need-your-support#join-us-now" class="hash-link" aria-label="Direct link to join-us-now" title="Direct link to join-us-now" translate="no">​</a></h2>]]></content>
        <author>
            <name>Mohab Mohie</name>
            <uri>https://github.com/MohabMohie</uri>
        </author>
        <category label="shaft_engine" term="shaft_engine"/>
        <category label="community" term="community"/>
        <category label="users" term="users"/>
        <category label="survey" term="survey"/>
        <category label="ecosystem" term="ecosystem"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Feature Announcement - Self-managed Appium Execution]]></title>
        <id>https://shaftengine.netlify.app/blog/self-managed-appium-execution</id>
        <link href="https://shaftengine.netlify.app/blog/self-managed-appium-execution"/>
        <updated>2023-02-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A new Major feature approaches!]]></summary>
        <content type="html"><![CDATA[<p>A new Major feature approaches!</p>
<p><a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank"><img src="https://raw.githubusercontent.com/ShaftHQ/SHAFT_ENGINE/master/src/main/resources/images/shaft.png" alt="Selenium WebDriver" height="50px"></a>    🤝    <a href="https://appium.github.io/appium/docs/en/2.0/" target="_blank"><img src="https://appium.github.io/appium/docs/en/2.0/assets/images/appium-logo-horiz.png" alt="Appium" height="50px"></a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-self-managed-appium-execution">What is self-managed appium execution?<a href="https://shaftengine.netlify.app/blog/self-managed-appium-execution#what-is-self-managed-appium-execution" class="hash-link" aria-label="Direct link to What is self-managed appium execution?" title="Direct link to What is self-managed appium execution?" translate="no">​</a></h2>
<ul>
<li class="">One of the common challenges for mobile application test automation is achieving and maintaining a proper testing environment.</li>
<li class="">A Testing environment consists of several elements; Android SDK CLI tools, Android System Image, Android Emulator, Support for Hardware acceleration, NPM, Appium 2.x server, drivers and plugins.</li>
<li class="">SHAFT will now download, and setup your testing environment.</li>
<li class="">SHAFT will also maintain everything in your environment to ensure that it's all up-to-date.</li>
<li class="">SHAFT will then initialize the Emulator, initialize the Appium server, and synchronize everything before starting test execution.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="watch-the-demo-and-explore-the-code-"><a href="https://youtu.be/JFuu9qyEgNM" target="_blank" rel="noopener noreferrer" class="">Watch the demo and explore the code ⮊</a><a href="https://shaftengine.netlify.app/blog/self-managed-appium-execution#watch-the-demo-and-explore-the-code-" class="hash-link" aria-label="Direct link to watch-the-demo-and-explore-the-code-" title="Direct link to watch-the-demo-and-explore-the-code-" translate="no">​</a></h2>]]></content>
        <author>
            <name>Mohab Mohie</name>
            <uri>https://github.com/MohabMohie</uri>
        </author>
        <category label="selenium" term="selenium"/>
        <category label="appium" term="appium"/>
        <category label="shaft_engine" term="shaft_engine"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Selenium Ecosystem]]></title>
        <id>https://shaftengine.netlify.app/blog/selenium-ecosystem</id>
        <link href="https://shaftengine.netlify.app/blog/selenium-ecosystem"/>
        <updated>2023-01-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're starting off 2023 with a huge announcement!]]></summary>
        <content type="html"><![CDATA[<p>We're starting off 2023 with a huge announcement!</p>
<p><a href="https://github.com/ShaftHQ/SHAFT_ENGINE" target="_blank"><img src="https://raw.githubusercontent.com/ShaftHQ/SHAFT_ENGINE/master/src/main/resources/images/shaft.png" alt="SHAFT_Engine" height="50px"></a>    🤝   <a href="https://www.selenium.dev/" target="_blank"><img src="https://www.selenium.dev/images/selenium_4_logo.png" alt="Selenium WebDriver" height="50px"></a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-the-selenium-ecosystem">What is the Selenium Ecosystem?<a href="https://shaftengine.netlify.app/blog/selenium-ecosystem#what-is-the-selenium-ecosystem" class="hash-link" aria-label="Direct link to What is the Selenium Ecosystem?" title="Direct link to What is the Selenium Ecosystem?" translate="no">​</a></h2>
<ul>
<li class="">Over the last decade, a large ecosystem of Open Source projects have sprouted up around Selenium.</li>
<li class="">The Selenium Ecosystem attempts to capture some of those projects that make use of Selenium WebDriver as a central part of what they do.</li>
<li class="">It consists of a number of drivers, bindings, plugins, and frameworks created and maintained by third parties.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-are-some-other-members-of-the-selenium-ecosystem">What are some other members of the Selenium Ecosystem?<a href="https://shaftengine.netlify.app/blog/selenium-ecosystem#what-are-some-other-members-of-the-selenium-ecosystem" class="hash-link" aria-label="Direct link to What are some other members of the Selenium Ecosystem?" title="Direct link to What are some other members of the Selenium Ecosystem?" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://chromedriver.chromium.org/" target="_blank" rel="noopener noreferrer" class="">Google ChromeDriver</a></li>
<li class=""><a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/" target="_blank" rel="noopener noreferrer" class="">Microsoft EdgeDriver</a></li>
<li class=""><a href="https://github.com/webdriverio/webdriverio" target="_blank" rel="noopener noreferrer" class="">WebdriverIO</a></li>
<li class=""><a href="https://github.com/nightwatchjs/nightwatch" target="_blank" rel="noopener noreferrer" class="">Nightwatch.js</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-use-a-framework-thats-part-of-the-selenium-ecosystem">Why use a framework that's part of the Selenium Ecosystem?<a href="https://shaftengine.netlify.app/blog/selenium-ecosystem#why-use-a-framework-thats-part-of-the-selenium-ecosystem" class="hash-link" aria-label="Direct link to Why use a framework that's part of the Selenium Ecosystem?" title="Direct link to Why use a framework that's part of the Selenium Ecosystem?" translate="no">​</a></h2>
<ul>
<li class="">These projects are developed, and maintained by third parties who dedicate their time and efforts to complement the solid infrastructure provided by Selenium WebDriver; the undisputed market leader for test automation since its inception.</li>
<li class="">They are very mature with many contributors and many users.</li>
<li class="">They are powered by Selenium WebDriver, which guarantees the widest and most mature user-base versus other competitors.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-use-shaft_engine">Why use SHAFT_Engine?<a href="https://shaftengine.netlify.app/blog/selenium-ecosystem#why-use-shaft_engine" class="hash-link" aria-label="Direct link to Why use SHAFT_Engine?" title="Direct link to Why use SHAFT_Engine?" translate="no">​</a></h2>
<ul>
<li class="">In its seventh year of development now and has accumulated 20 more contributors over the years.</li>
<li class="">One of the largest open source projects in the MEA region.</li>
<li class="">Has several tens of thousands downloads, and is being used by <a href="https://github.com/ShaftHQ/SHAFT_ENGINE#-who-else-is-using-shaft-2" target="_blank" rel="noopener noreferrer" class="">18+ organizations (that we know of)</a> to drive their automation efforts.</li>
<li class="">Powered by <a href="https://github.com/ShaftHQ/SHAFT_ENGINE#-powered-by" target="_blank" rel="noopener noreferrer" class="">Selenium, Appium, RestAssured, and other best-in-class automation frameworks</a>, SHAFT supports Web/Mobile/API/CLI/DB/Desktop test automation.</li>
<li class="">Offers excellent business-centric reporting with automated evidences (screenshots, videos, attachments) and logs.</li>
<li class="">Out-of-the-box simple test data management with secure encryption support.</li>
<li class="">Supports Local, remote, unattended, sequential, parallel, and containerized test execution.</li>
<li class="">Built-in test synchronization and error handling.</li>
<li class="">Built-in third party integrations with Jira, Xray, BrowserStack, and Applitools Eyes.</li>
<li class="">AI-powered Element Identification, visual checkpoints, and self-healing tests.</li>
<li class="">Element Locator Builder with full support for Selenium 4 Relative Locators.</li>
<li class="">Fluent actions and validations library.</li>
<li class="">And the list goes on...</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-does-being-a-member-of-the-selenium-ecosystem-mean-for-shaft_engine">What does being a member of the Selenium Ecosystem mean for SHAFT_Engine?<a href="https://shaftengine.netlify.app/blog/selenium-ecosystem#what-does-being-a-member-of-the-selenium-ecosystem-mean-for-shaft_engine" class="hash-link" aria-label="Direct link to What does being a member of the Selenium Ecosystem mean for SHAFT_Engine?" title="Direct link to What does being a member of the Selenium Ecosystem mean for SHAFT_Engine?" translate="no">​</a></h2>
<ul>
<li class="">It means that SHAFT_Engine is now one of 13 high-level frameworks that are built on top of Selenium WebDriver and have officially joined the ecosystem.</li>
<li class="">It will gain more visibility and more community support.</li>
<li class="">And our core maintainers will continue to remain close to the Selenium Technical Leadership committee, ensuring that SHAFT remains ahead of the curve and always aligned to the latest Selenium WebDriver has to offer.</li>
</ul>
<p>In summary, we thank you for your support over the past 6 years, and we promise to continue to offer you a fully-featured best-in-class reliabie, consistent, secure, and fast Test Automation Solution.</p>]]></content>
        <author>
            <name>Mohab Mohie</name>
            <uri>https://github.com/MohabMohie</uri>
        </author>
        <category label="selenium" term="selenium"/>
        <category label="ecosystem" term="ecosystem"/>
        <category label="shaft_engine" term="shaft_engine"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Welcome]]></title>
        <id>https://shaftengine.netlify.app/blog/welcome</id>
        <link href="https://shaftengine.netlify.app/blog/welcome"/>
        <updated>2023-01-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[SHAFT Engine]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" src="https://raw.githubusercontent.com/ShaftHQ/SHAFT_ENGINE/master/src/main/resources/images/shaft.png" alt="SHAFT Engine" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-start-a-blog">Why start a blog?<a href="https://shaftengine.netlify.app/blog/welcome#why-start-a-blog" class="hash-link" aria-label="Direct link to Why start a blog?" title="Direct link to Why start a blog?" translate="no">​</a></h3>
<p>SHAFT_Engine has been long running for over 7 years with thousands of users across hundreds of projects.</p>
<p>Our intention is to start using Blog Posts like this one, to communicate for new releases, announcements and other important updates!</p>
<p>So <strong>Stay Tuned</strong> 😉</p>]]></content>
        <author>
            <name>Mohab Mohie</name>
            <uri>https://github.com/MohabMohie</uri>
        </author>
        <category label="welcome" term="welcome"/>
        <category label="hello" term="hello"/>
        <category label="docusaurus" term="docusaurus"/>
        <category label="shaft_engine" term="shaft_engine"/>
    </entry>
</feed>