SVG Loader
SVG element is removed
📺 Watch this recipe in the video SVG Loader Example.
<div class="loader">
<svg
xmlns="http://www.w3.org/2000/svg"
width="80px"
height="80px"
viewBox="0 0 100 100"
preserveAspectRatio="xMidYMid"
>
<circle
cx="50"
cy="50"
fill="none"
stroke="#3F80F3"
stroke-width="10"
r="30"
stroke-dasharray="141.37166941154067 49.12388980384689"
transform="rotate(182.503 50 50)"
>
<animateTransform
attributeName="transform"
type="rotate"
calcMode="linear"
values="0 50 50;360 50 50"
keyTimes="0;1"
dur="2s"
begin="0s"
repeatCount="indefinite"
/>
</circle>
</svg>
</div>
<script>
setTimeout(() => {
document.querySelector('.loader').innerHTML = `
<span>Loaded!</span>
`
}, 2500)
</script>
cy.get('.loader svg').should('be.visible')
cy.get('.loader svg').should('not.exist')
cy.contains('.loader', 'Loaded')
SVG animation finishes
Imagine we want to know when the SVG animation finishes. From the spec code we can listen to the endEvent event on the animateTransform element. By using a cy.spy and its assertion have.called we can automatically wait in our test.
📺 Watch this recipe in the video Wait For SVG Animate Transform End Event
<div class="loader">
<svg
xmlns="http://www.w3.org/2000/svg"
width="80px"
height="80px"
viewBox="0 0 100 100"
preserveAspectRatio="xMidYMid"
>
<circle
cx="50"
cy="50"
fill="none"
stroke="#3F80F3"
stroke-width="10"
r="30"
stroke-dasharray="141.37166941154067 49.12388980384689"
>
<animateTransform
attributeName="transform"
type="rotate"
calcMode="linear"
values="0 50 50;360 50 50"
keyTimes="0;1"
dur="2s"
begin="0s"
repeatCount="1"
/>
</circle>
</svg>
</div>
cy.get('.loader svg')
.should('be.visible')
.find('animateTransform')
.invoke('on', 'endEvent', cy.spy().as('animate'))
// wait for the animation to finish
cy.get('@animate').should('have.been.called')