UNPKG

@wix/design-system

Version:

@wix/design-system

135 lines 4.22 kB
import { baseUniDriverFactory, getByHook } from '../utils/test-utils/unidriver'; export const popoverNextUniDriverFactory = (base, body) => { const byHook = (hook) => base.$(`[data-hook="${hook}"]`); const getRoot = async () => { const isBaseRoot = !!(await base.attr('data-popover-root')); return isBaseRoot ? base : base.$('[data-popover-root]'); }; const getRootDataHook = async () => { return (await (await getRoot()).attr('data-hook')) ?? undefined; }; const getTrigger = async () => { const dataHook = await getRootDataHook(); return getByHook(body, `${dataHook}-trigger`); }; const getContent = async () => { const dataHook = await getRootDataHook(); let content; try { content = await getByHook(body, `${dataHook}-content`); } catch (e) { } return content; }; const getTriggerElement = async () => (await getTrigger()).getNative(); const triggerExists = async () => { try { const trigger = await getTrigger(); return trigger.exists(); } catch { return false; } }; const getContentElement = async () => (await getContent())?.getNative(); return { ...baseUniDriverFactory(base), /** * Clicks the trigger element * @returns {Promise<void>} */ click: async () => { try { const trigger = await getTrigger(); return trigger.click(); } catch { } }, /** * Gets the trigger element * @returns {Promise<any>} */ getTriggerElement, /** * Gets the target element * @deprecated use getTriggerElement * @returns {Promise<any>} */ getTargetElement: getTriggerElement, /** * Checks whether the trigger element exists * @returns {Promise<boolean>} */ triggerExists, /** * Checks whether target element exists * @deprecated use triggerExists * @returns {Promise<boolean>} */ isTargetElementExists: triggerExists, /** * Gets the portal element * @deprecated * @returns {Promise<any>} */ getPortalElement: async () => byHook('popover-portal').getNative(), /** * Gets the content element * @returns {Promise<any>} */ getContentElement, /** * Checks whether content element exists * @returns {Promise<boolean>} */ isContentElementExists: async () => (await getContent())?.exists() ?? false, /** * Triggers a mouseEnter event * @returns {Promise<void>} */ mouseEnter: async () => { const root = await getRoot(); return root.hover(); }, /** * Triggers a mouseLeave event * @returns {Promise<void>} */ mouseLeave: async () => { const root = await getRoot(); return root.mouse.leave(); }, /** * Clicks outside the target element * @returns {Promise<void>} */ clickOutside: async () => body.click(), /** * Gets the arrow offset * @returns {Promise<any>} */ getArrowOffset: async () => (await byHook('popover-arrow').getNative())?.style, /** * Gets content as unidriver element * @deprecated * @internal * Use `getContent` instead. * This is left out for feature parity. */ getContentElementUniDriver: async () => getContent(), /** * Checks whether the content is visible * @returns {Promise<boolean>} */ isContentVisible: async () => { try { const content = await getContent(); return (await content?.exists()) === true; } catch { return false; } }, }; }; //# sourceMappingURL=PopoverNext.uni.driver.js.map