اکشن
دستور اکشن یک رابط سطح پایین برای ارائه اقدامات ورودی دستگاه مجازی به مرورگر وب است.
علاوه بر دستورات سطح بالایی مانند 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
})