اکشن
دستور اکشن یک رابط سطح پایین برای ارائه اقدامات ورودی دستگاه مجازی به مرورگر وب است.
علاوه بر دستورات سطح بالایی مانند scrollIntoView، doubleClick، API اکشنها کنترل دقیقی بر روی دقیقاً آنچه دستگاههای ورودی تعیین شده میتوانند انجام دهند، فراهم میکند. WebdriverIO رابطی برای ۳ نوع منبع ورودی ارائه میدهد:
- ورودی کلید برای دستگاههای صفحه کلید
- ورودی اشارهگر برای موس، قلم یا دستگاههای لمسی
- و ورودی چرخ برای دستگاههای چرخ اسکرول
هر زنجیرهای از دستورات اکشن باید با فراخوانی perform تکمیل شود تا مجموعه اکشنها اجرا شود. این باعث میشود اکشنها آزاد شوند و رویدادها فعال شوند. میتوانید با ارسال true (به عنوان مثال browser.actions(...).perform(true)) از این مرحله صرف نظر کنید.
منبع ورودی کلید
منبع ورودی کلید، منبع ورودی است که با دستگاه نوع صفحهکلید مرتبط است. میتوان آن را با استفاده از پارامترهای نوع key فعال کرد. مثال:
browser.action('key')
این یک شیء KeyAction را برمیگرداند که از اکشنهای زیر پشتیبانی میکند:
down(value: string): یک اکشن فشردن کلید ایجاد میکندup(value: string): یک اکشن رها کردن کلید ایجاد میکندpause(ms: number): نشان میدهد که یک منبع ورودی در یک زمان خاص هیچ کاری انجام نمیدهد
کاراکترهای خاص
اگر میخواهید از کاراکترهای خاص مانند Control، Page Up یا Shift استفاده کنید، مطمئن شوید که شیء
Key
را از بسته webdriverio به این صورت وارد میکنید:
import { Key } from 'webdriverio'
این شیء به شما امکان دسترسی به نمایش یونیکد کاراکتر خاص مورد نظر را میدهد.
منبع ورودی اشارهگر
منبع ورودی اشارهگر، منبع ورودی است که با دستگاه ورودی نوع اشارهگر مرتبط است. نوع آن میتواند هنگام فراخوانی دستور action مشخص شود، مثال:
browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse" مقدار پیشفرض است، همچنین ممکن است: "pen" یا "touch"
})
این یک شیء PointerAction را برمیگرداند که از اکشنهای زیر پشتیبانی میکند:
down (button: 'left' | 'middle' | 'right'): یک اکشن برای فشردن یک کلید ایجاد میکندdown (params: PointerActionParams): یک اکشن برای فشردن یک کلید با پارامترهای دقیق ایجاد میکندmove (x: number, y: number): یک اکشن برای حرکت اشارهگر به اندازهxوyپیکسل از نمای قابل مشاهده ایجاد میکندmove (params: PointerActionMoveParams): یک اکشن برای حرکت اشارهگر به اندازهxوyپیکسل ازoriginمشخص شده ایجاد میکند.originمیتواند به عنوان موقعیت فعلی اشارهگر (مثلاً "pointer")، نمای قابل مشاهده (مثلاً "viewport") یا مرکز یک عنصر خاص تعریف شود.up (button: 'left' | 'middle' | 'right'): یک اکشن برای رها کردن یک کلید ایجاد میکندup (params: PointerActionUpParams): یک اکشن برای رها کردن یک کلید با پارامترهای دقیق ایجاد میکندcancel(): اکشنی که ورودی فعلی این اشارهگر را لغو میکند.pause(ms: number): نشان میدهد که یک منبع ورودی در یک زمان خاص هیچ کاری انجام نمیدهد
میتوانید اطلاعات دقیق در مورد انواع پارامتر PointerActionParams، PointerActionMoveParams و PointerActionUpParams را در تعریف نوع پروژه پیدا کنید.
منبع ورودی چرخ
منبع ورودی چرخ، منبع ورودی است که با دستگاه ورودی نوع چرخ مرتبط است.
browser.action('wheel')
این یک شیء WheelAction را برمیگرداند که از اکشنهای زیر پشتیبانی میکند:
scroll (params: ScrollParams): صفحه را به مختصات یا مبدأ معینی اسکرول میکندpause(ms: number): نشان میدهد که یک منبع ورودی در یک زمان خاص هیچ کاری انجام نمیدهد
میتوانید اطلاعات دقیق در مورد نوع پارامتر ScrollParams را در تعریف نوع پروژه پیدا کنید.
استفاده
browser.action()
مثالها
it('drag and drop using pointer action command', async () => {
const origin = await $('#source')
const targetOrigin = await $('#target')
return browser.action('pointer')
.move({ duration: 0, origin, x: 0, y: 0 })
.down({ button: 0 }) // left button
.pause(10)
.move({ duration: 0, origin: targetOrigin })
.up({ button: 0 })
.perform()
});
import { Key } from 'webdriverio'
it('should emit key events using key action commands', async () => {
const elem = await $('input')
await elem.click() // make element active
await browser.action('key')
.down('f')
.down('o')
.down('o')
.up('f')
.up('o')
.up('o')
.perform()
console.log(await elem.getValue()) // returns "foo"
// copy value out of input element
await browser.action('key')
.down(Key.Ctrl).down('c')
.pause(10)
.up(Key.Ctrl).up('c')
.perform()
})
it('should scroll using wheel action commands', async () => {
console.log(await browser.execute(() => window.scrollY)) // returns 0
await browser.action('wheel').scroll({
deltaX: 0,
deltaY: 500,
duration: 200
}).perform()
console.log(await browser.execute(() => window.scrollY)) // returns 500
})