# Cypress example
```javascript
// The command to get VForm by its specific name
Cypress.Commands.add("getVForm", (vformName: string, timeout = 1000 * 30) => {
return cy.get(`div[data-vf="${vformName}"]`, { timeout: timeout });
});
// wait for the ajax event
Cypress.Commands.add('firingAjaxEvent', { prevSubject: 'element' }, (subject, action, onAjaxReturned, numberOfAjaxToWait = 1, debugKey = '') => {
const ajaxEventKey = `ajax-${debugKey}-${(new Date()).toISOString()}`;
cy.intercept({
url: '**/CS.aspx**',
method: 'POST',
times: numberOfAjaxToWait,
}).as(ajaxEventKey).then(() => {
action(cy.wrap(subject)).then(() => {
for (let i = 0; i < numberOfAjaxToWait; i++) {
cy.wait(`@${ajaxEventKey}`); // We want the waits to be fire and forget
}
cy.wait(1000); // Wait for setup JS to run
if (onAjaxReturned) {
onAjaxReturned();
}
});
});
});
// Get the first VForm with the given VForm name
Cypress.Commands.add("getControl", { prevSubject: 'element' }, (subject, controlName: string, timeout = 1000 * 30) => getChildInElement(subject, `div[id$=":${controlName}"]`, timeout));
// Get the first VForm with the given VForm name
Cypress.Commands.add("getButton", { prevSubject: 'element' }, (subject, controlName: string, timeout = 1000 * 30) => getChildInElement(subject, `div.Button[id$=":${controlName}"] a`, timeout));
// Get the first VForm with the given VForm name
Cypress.Commands.add("getInput", { prevSubject: 'element' }, (subject, controlName: string, timeout = 1000 * 30) => getChildInElement(subject, `input[id$=":${controlName}"]`, timeout));
// Helper tries resolving the inconsistent click behavior
Cypress.Commands.add('mouseClick', { prevSubject: 'element' }, (subject) => cy.wrap(subject).trigger('mouseover').click());
it('Impersonate', () => {
cy.visit(`CS.aspx?VP3=CMS3&VF=Home`, {
timeout: 1000 * 60 * 2
}).then(() => {
cy.wait(1000);
cy.getVForm('PageHeader_OverFullscreenSlideshow_VForm').should('be.visible');
cy.getVForm('PageHeader_OverFullscreenSlideshow_VForm').getControl('WelcomeLbl').click();
cy.get("a[aria-label='Impersonate Another User']").firingAjaxEvent((button) => button.mouseClick(), () => {
cy.wait(1000)
cy.getVForm('ContactImpersonateWidget_VForm')
.getInput('ImpersonateAC')
.type('FIRSTNAME.LASTNAME', { force: true });
// Select option in auto completion
cy.get('.c2.ColClass',{timeout:1000 * 60 * 2})
.contains('FIRSTNAME.LASTNAME').firingAjaxEvent((button) => button.mouseClick(), () => {
// Assert
cy.get("a[aria-label='Stop impersonating']").firingAjaxEvent((button) => button.mouseClick(), () => {
//Assert
});
});
});
});
});
```