@puppedo/atoms
Version:
Atoms for PuppeDo
95 lines (86 loc) • 2.85 kB
YAML
name: clickSelectorNative
bindDescriprion: "`Wait selector: '${selector}' and click`"
needSelectors: ['selector']
needData: ['selectorNumber?']
allowOptions:
- 'count'
- 'timeDelayBeforeClick'
- 'logAfter'
- 'hidden'
- 'visible'
- 'timeDelayBeforeWait'
- 'timeDelayAfterWait'
- 'timeDelayAfterClick'
- 'waitingTime'
logOptions: { logChildren: false }
runTest:
- waitForSelector:
description: Wait selector
bindSelector: { selector: selector }
- blank:
if: 'selectorNumber === null'
const: { selectorNumber: 0 }
- blank:
description: Click
bindData: { selectorNumber: selectorNumber }
bindSelector: { selector: selector }
bindDescriprion: "`Click selector: '${selector}'`"
needSelectors: ['selector']
needData: ['selectorNumber?']
allowOptions: ['count', 'timeDelayBeforeClick', 'logAfter', 'timeDelayAfterClick']
inlineJS: >
const { selector } = this.selectors;
const selectorNumber = this.data.selectorNumber || 0;
const {
count = 1,
timeDelayBeforeClick = 0,
logAfter = false,
timeDelayAfterClick = 0,
} = this.options;
const element = ((await this.getElement(selector, true)) || [])[selectorNumber];
if (timeDelayBeforeClick) {
await this.page.waitForTimeout(timeDelayBeforeClick);
}
try {
if (!logAfter) {
await this.log({ text: `Click selector: '${selector}'`, element });
}
if (this.getEngine('playwright')) {
await this.page.evaluate(
({ element, count }) => {
for (let i = 0; i < count; i++) {
element.click();
}
},
{ element, count },
);
} else if (this.getEngine('puppeteer')) {
await this.page.evaluate(
(element, count) => {
for (let i = 0; i < count; i++) {
element.click();
}
},
element,
count,
);
} else {
throw new Error(`There is unknown engine ${this.getEngine()}`);
}
if (logAfter) {
await this.log({ text: `Click selector: '${selector}'`, element });
}
} catch (error) {
await this.log({
text: `Can't click selector: '${selector}'`,
element,
screenshot: true,
extendInfo: true,
level: 'error',
});
throw error;
}
if (timeDelayAfterClick) {
await this.page.waitForTimeout(timeDelayAfterClick);
}
await element.dispose();