سرویس مقایسه تصویر (تست رگرسیون بصری)
@wdio/visual-service یک پکیج شخص ثالث است، برای اطلاعات بیشتر لطفاً به GitHub | npm مراجعه کنید
برای مستندات تست بصری با WebdriverIO، لطفاً به مستندات مراجعه کنید. این پروژه شامل تمام ماژولهای مرتبط برای اجرای تستهای بصری با WebdriverIO است. در دایرکتوری ./packages
موارد زیر را خواهید یافت:
@wdio/visual-testing
: سرویس WebdriverIO برای یکپارچهسازی تستهای بصریwebdriver-image-comparison
: یک ماژول مقایسه تصویر که میتواند برای چارچوبهای مختلف تست خودکار NodeJS که از پروتکل WebDriver پشتیبانی میکنند، استفاده شود
اجراکننده Storybook (بتا)
برای اطلاعات بیشتر درباره اجراکننده Storybook بتا کلیک کنید
اجراکننده Storybook همچنان در مرحله بتا است، مستندات بعداً به صفحات مستندات WebdriverIO منتقل خواهد شد.
این ماژول اکنون از Storybook با یک اجراکننده بصری جدید پشتیبانی میکند. این اجراکننده به طور خودکار یک نمونه storybook محلی/راه دور را اسکن میکند و اسکرینشات عنصر از هر کامپوننت ایجاد میکند. این کار با اضافه کردن
export const config: WebdriverIO.Config = {
// ...
services: ["visual"],
// ....
};
به services
و اجرای npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook
از طریق خط فرمان انجام میشود.
به صورت پیشفرض از Chrome در حالت headless استفاده خواهد کرد.
[!NOTE]
- بیشتر گزینههای تست بصری برای اجراکننده Storybook نیز کار میکنند، به مستندات WebdriverIO مراجعه کنید.
- اجراکننده Storybook تمام قابلیتهای شما را بازنویسی میکند و فقط میتواند روی مرورگرهایی که پشتیبانی میکند اجرا شود، به
--browsers
مراجعه کنید.- اجراکننده Storybook از یک پیکربندی موجود که از قابلیتهای Multiremote استفاده میکند پشتیبانی نمیکند و خطا خواهد داد.
- اجراکننده Storybook فقط از Desktop Web پشتیبانی میکند، نه Mobile Web.
گزینههای سروی س اجراکننده Storybook
گزینههای سرویس میتوانند به این صورت ارائه شوند
export const config: WebdriverIO.Config = {
// ...
services: [
[
'visual',
{
// برخی گزینههای پیشفرض
baselineFolder: join(process.cwd(), './__snapshots__/'),
debug: true,
// گزینههای storybook، به گزینههای cli برای توضیحات مراجعه کنید
storybook: {
additionalSearchParams: new URLSearchParams({foo: 'bar', abc: 'def'}),
clip: false,
clipSelector: ''#some-id,
numShards: 4,
// `skipStories` میتواند یک رشته ('example-button--secondary')،
// یک آرایه (['example-button--secondary', 'example-button--small'])
// یا یک regex باشد که باید به صورت رشته ارائه شود ("/.*button.*/gm")
skipStories: ['example-button--secondary', 'example-button--small'],
url: 'https://www.bbc.co.uk/iplayer/storybook/',
version: 6,
// اختیاری - امکان اورراید کردن مسیر خط مبنا را فراهم میکند. به صورت پیشفرض خطوط مبنا را بر اساس دسته و کامپوننت گروهبندی میکند (مثلاً forms/input/baseline.png)
getStoriesBaselinePath: (category, component) => `path__${category}__${component}`,
},
},
],
],
// ....
}
گزینههای CLI اجراکننده Storybook
--additionalSearchParams
- نوع:
string
- اجباری: خیر
- پیشفرض: ''
- مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --additionalSearchParams="foo=bar&abc=def"
پارامترهای جستجوی اضافی را به URL استوریبوک اضافه میکند. برای اطلاعات بیشتر به مستندات URLSearchParams مراجعه کنید. رشته باید یک رشته URLSearchParams معتبر باشد.
[!NOTE] علامتهای نقل قول دوگانه برای جلوگیری از تفسیر
&
به عنوان جداکننده دستور مورد نیاز است. به عنوان مثال با--additionalSearchParams="foo=bar&abc=def"
URL استوریبوک زیر برای تست داستانها ایجاد میشود:http://storybook.url/iframe.html?id=story-id&foo=bar&abc=def
.
--browsers
- نوع:
string
- اجباری: خیر
- پیشفرض:
chrome
، میتوانید ازchrome|firefox|edge|safari
انتخاب کنید - مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --browsers=chrome,firefox,edge,safari
- نکته: فقط از طریق CLI در دسترس است
از مرورگرهای ارائه شده برای گرفتن اسکرینشات کامپوننت استفاده میکند
[!NOTE] اطمینان حاصل کنید که مرورگرهایی که میخواهید روی آنها اجرا کنید روی دستگاه محلی شما نصب شدهاند
--clip
- نوع:
boolean
- اجباری: خیر
- پیشفرض:
true
- مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --clip=false
وقتی غیرفعال است، یک اسکرینشات ویوپورت ایجاد میکند. وقتی فعال است، اسکرینشاتهای عنصر بر اساس --clipSelector
ایجاد میکند که فضای سفید اطراف اسکرینشات کامپوننت را کاهش داده و اندازه اسکرینشات را کم میکند.
--clipSelector
- نوع:
string
- اجباری: خیر
- پیشفرض:
#storybook-root > :first-child
برای Storybook V7 و#root > :first-child:not(script):not(style)
برای Storybook V6، همچنین به--version
مراجعه کنید - مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --clipSelector="#some-id"
این انتخابگر برای موارد زیر استفاده میشود:
- انتخاب عنصر برای گرفتن اسکرینشات
- برای عنصری که قبل از گرفتن اسکرینشات باید قابل مشاهده باشد
--devices
- نوع:
string
- اجباری: خیر
- پیشفرض: میتوانید از
deviceDescriptors.ts
انتخاب کنید - مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --devices="iPhone 14 Pro Max","Pixel 3 XL"
- نکته: فقط از طریق CLI در دسترس است
از دستگاههای ارائه شده که با deviceDescriptors.ts
مطابقت دارند برای گرفتن اسکرینشات کامپوننت استفاده میکند
[!NOTE]
- اگر پیکربندی دستگاهی را از دست دادهاید، لطفاً یک درخواست ویژگی ارسال کنید
- این فقط با Chrome کار میکند:
- اگر
--devices
را ارائه دهید، تمام نمونههای Chrome در حالت شبیهسازی موبایل اجرا میشوند- اگر مرورگرهای دیگری مانند
--devices --browsers=firefox,safari,edge
نیز ارائه دهید، به طور خودکار Chrome را در حالت شبیهسازی موبایل اضافه میکند- اجراکننده Storybook به طور پیشفرض اسنپشاتهای عنصر ایجاد میکند، اگر میخواهید اسکرینشات کامل شبیهسازی شده موبایل را ببینید،
--clip=false
را از طریق خط فرمان ارائه دهید- نام فایل به عنوان مثال به شکل
__snapshots__/example/button/desktop_chrome/example-button--large-local-chrome-iPhone-14-Pro-Max-430x932-dpr-3.png
خواهد بود- منبع: تست یک وبسایت موبایل روی یک دسکتاپ با استفاده از شبیهسازی موبایل میتواند مفید باشد، اما تستکنندگان باید از تفاوتهای ظریف متعددی آگاه باشند مانند:
- GPU کاملاً متفاوت، که ممکن است منجر به تغییرات عملکردی بزرگی شود؛
- رابط کاربری موبایل شبیهسازی نمیشود (به ویژه، مخفی کردن نوار url بر ارتفاع صفحه تأثیر میگذارد)؛
- پاپآپ رفع ابهام (جایی که یکی از چند هدف لمسی را انتخاب میکنید) پشتیبانی نمیشود؛
- بسیاری از APIهای سختافزاری (به عنوان مثال، رویداد orientationchange) در دسترس نیستند.
--headless
- نوع:
boolean
- اجباری: خیر
- پیشفرض:
true
- مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --headless=false
- نکته: فقط از طریق CLI در دسترس است
این تستها را به طور پیشفرض در حالت headless اجرا میکند (وقتی مرورگر از آن پشتیبانی میکند) یا میتواند غیرفعال شود
--numShards
- نوع:
number
- اجباری: خیر
- پیشفرض:
true
- مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --numShards=10
این تعداد نمونههای موازی خواهد بود که برای اجرای داستانها استفاده میشود. این توسط maxInstances
در فایل wdio.conf
شما محدود خواهد شد.
[!IMPORTANT] هنگام اجرا در حالت
headless
، برای جلوگیری از ناپایداری به دلیل محدودیتهای منابع، تعداد را بیش از 20 افزایش ندهید
--skipStories
- نوع:
string|regex
- اجباری: خیر
- پیشفرض: null
- مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --skipStories="/.*button.*/gm"
این میتواند:
- یک رشته (
example-button--secondary,example-button--small
) - یا یک regex (
"/.*button.*/gm"
)
باشد تا داستانهای خاصی را رد کند. از id
داستان که در URL داستان قابل یافتن است استفاده کنید. به عنوان مثال، id
در این URL http://localhost:6006/?path=/story/example-page--logged-out
برابر است با example-page--logged-out
--url
- نوع:
string
- اجباری: خیر
- پیشفرض:
http://127.0.0.1:6006
- مثال:
npx wdio tests/configs/wdio.local.desktop.storybook.conf.ts --storybook --url="https://example.com"
URL جایی که نمونه Storybook شما میزبانی میشود.