دو تیم یک جریان Checkout را خودکار می‌کنند. تیم Selenium آن را در ۴۵ ثانیه و تیم Cypress در ۲۸ ثانیه اجرا می‌کند. آیا Cypress برنده است؟ هنوز نه. اولی سه مرورگر و دو Role را اجرا کرده، دومی فقط یک مرورگر و یک Happy path؛ اولی Evidence شکست را محلی نگه داشته، دومی Run را در Cloud ضبط کرده؛ و هیچ‌کدام Fault عمدی «Callback تکراری» را نمی‌گیرند. عدد زمان بدون Workload و Oracle همسان، مقایسه نیست.

این راهنما رقابت برندها یا پیش‌بینی حقوق نیست. یک Selenium–Cypress Matched Trial می‌سازد: همان Role، Journey، Browser/OS، Build، Data، State، Network profile، Fault، repetition و Change را در دو Candidate اجرا می‌کنید؛ سپس Fit، Setup، Diagnosis، CI، Flake، Maintenance، Handoff، TCO و محدودیت ایران را با Evidence مقایسه و تصمیم ADOPT/LIMIT/KEEP/MIGRATE/INCONCLUSIVE ثبت می‌کنید.

پاسخ کوتاه: Selenium بهتر است یا Cypress؟

برای همهٔ تیم‌ها برندهٔ مطلق وجود ندارد. Selenium WebDriver وقتی زبان/اکوسیستم تیم، مرورگر/پلتفرم گسترده، کنترل چند Window یا Grid و interoperability مهم است Candidate قوی است. Cypress وقتی E2E/Component وب، JavaScript/TypeScript، feedback تعاملی، network control و debugging داخل مرورگر با Workflow تیم هم‌خوان است Candidate جدی است. اما قابلیت روی کاغذ باید در PoC نماینده و Handoff واقعی تأیید شود.

تصمیم اشتباهجایگزین قابل‌سنجش
«Selenium شغل بیشتر دارد»نمونهٔ تاریخ‌دار آگهی با Role/Task/Stack/Level/شهر و dedup
«Cypress سریع‌تر است»Workload/Browser/CI/resource/repeat همسان و distribution
«Selenium Flaky است»Fault mechanism و first-attempt flake در Suite همسان
«Cypress آسان‌تر است»زمان تا first signal، diagnosis، change و handoff برای تیم واقعی
«ابزار X حقوق را بالا می‌برد»Role/Level/Location/Contract/Capability/Offer؛ ابزار فقط یک attribute

مرز این مقاله با انتخاب ابزار عمومی و مسیر یادگیری

راهنمای انتخاب ابزار تست اتوماسیون مالک shortlist و PoC میان Selenium، Cypress، Playwright، Appium و گزینه‌های دیگر است؛ انتخاب Framework اتوماسیون معماری و TCO فریم‌ورک را پوشش می‌دهد؛ نقشهٔ شروع اتوماسیون برای یادگیری اولیه است. این صفحه فقط Trial دو Candidate Selenium/Cypress را عمیق می‌کند.

اول Decision Contract، بعد نصب ابزار

TOOL DECISION CONTRACT
decision_id: SCMT-SYN-042
as_of: 2026-08-14
decision: choose a primary web UI automation candidate for one bounded team
stakeholders: product / QA / frontend / platform / security
decision_owner / reviewers:
target_role / tasks / work products:
product/browser/user/support matrix:
top risks / evidence needs:
must-haves / hard stops:
trial budget / due_at:
options: Selenium / Cypress / hybrid / neither
not_claimed: hiring, salary, career security, total product quality

«ابزار آینده‌ساز» Decision نیست. شاید تصمیم واقعی حفظ Suite موجود، افزودن Cypress برای Component tests، مهاجرت یک Journey، یا رد هر دو به نفع Candidate دیگری باشد. Authority را روشن کنید؛ نویسندهٔ PoC نباید به‌تنهایی خرید Cloud، مهاجرت Repository یا حذف Suite را تصویب کند.

Task و Risk را پیش از Scorecard بنویسید

ابزار برای Task انتخاب می‌شود: E2E وب، Component، cross-browser، SSO/cross-origin، multi-window، دانلود/آپلود، network interception، visual evidence، Grid/parallel CI یا collaboration؟ Risk نیز مشخص کند کدام Failure باید کشف شود: state غلط، unauthorized view، double submit، race، localization، browser incompatibility یا flaky signal.

TRIAL JOURNEY CONTRACT
journey_id: SYN-CHECKOUT-WEB-07
actor/role: synthetic customer tenant-17
steps: login → cart → checkout → callback status → receipt
critical claims: one order; one ledger effect; correct 1,250,000 IRR
browsers: exact risk-based matrix
origins/windows/iframes/downloads:
data/state/setup/cleanup:
faults: delayed render, stale locator, duplicate callback, wrong currency
evidence: screenshot/DOM/network/trace/state refs
forbidden: production, real PSP/card/user/account
not_claimed:

Hard Gate را از امتیاز وزنی جدا کنید

Hard Gateمثالقاعده
Browser/PlatformSafari واقعی یا browser مشخص قراردادنبود قابلیت با سرعت جبران نمی‌شود
Workflowدو Browser هم‌زمان یا cross-origin/iframe خاصProbe نماینده؛ PASS/HOLD/STOP
Language/RepositoryStack مجاز و reviewable تیمSkill/ownership باید واقعی باشد
Security/DataSecret/PII/Cloud boundaryنقض policy = STOP
CI/OfflineRunner در شبکه و registry تیمclean install/run اجباری
Evidence/HandoffReceiver می‌تواند Failure را تشخیص دهدنبود = HOLD

بعد از پاس همهٔ Gateها می‌توان criteria مانند developer experience، execution duration، diagnosis effort، maintenance effort و cost را وزن داد. میانگین امتیاز نباید یک Hard Stop را پنهان کند.

Selenium چیست؟ Claim رسمی و مرز آن

مستندات رسمی Selenium WebDriver آن را API/Protocol زبان‌خنثی برای کنترل Browserهای اصلی از طریق Driverهای پیاده‌سازی‌شده برای هر Browser معرفی می‌کند. Bindingهای زبان و اکوسیستم runner/library به تیم آزادی می‌دهند، اما خود Selenium معماری Test، Oracle، Report، Data، CI یا نگه‌داری را برای شما کامل نمی‌کند.

Setup سلنیوم دیگر فقط Driver دستی نیست

Selenium Manager از نسخه‌های مدرن مدیریت Driver و در برخی مسیرها Browser را تسهیل می‌کند و Bindingها وقتی Driver مناسب موجود نیست آن را فراخوانی می‌کنند. بنابراین «راه‌اندازی همیشه کابوس و Driver کاملاً دستی» ادعای منقضی است. بااین‌حال download/cache/proxy/mirror/version/pinning و شبکهٔ CI ایران باید در clean install آزموده شود.

Selenium خودبه‌خود کند یا Flaky نیست

Duration به Browser startup، Grid/network، locator، wait، App، data، screenshots، parallelism و scope بستگی دارد. مستندات رسمی Waiting Strategies race میان وضعیت App و command را علت رایج Flake می‌داند و دربارهٔ ترکیب implicit/explicit wait هشدار می‌دهد. sleep ثابت یا locator شکننده مشکل طراحی است، نه حکم ذاتی یک برند.

Cypress چیست؟ Claim رسمی و مرز آن

Cypress برای E2E و Component testing برنامه‌های وب طراحی شده و command log، snapshot/debugging، automatic retry-ability و network stubbing را ارائه می‌کند. App محلی بدون حساب Cloud قابل‌استفاده است؛ Cloud recording، Test Replay، analytics و orchestration قابلیت‌های جدا با Account/Plan/Data boundary هستند.

Cypress تضمین Flake-free نمی‌دهد

صفحهٔ بازاریابی Cypress عبارت‌های بسیار قوی دربارهٔ consistency دارد، اما مستندات رسمی Retry صریحاً animation، API، test server/database، dependency و network را علت رفتار unreliable می‌نامد و Attemptها را ثبت می‌کند. Auto-wait احتمال بعضی raceها را کم می‌کند؛ weak Oracle، state sharing، data collision یا App race را حذف نمی‌کند.

Browser Matrix را با قرارداد کاربر بسازید

Selenium برای Browserهای اصلی Driver/feature اختصاصی دارد. Cypress فعلی Chrome-family شامل Edge/Electron، Firefox و WebKit آزمایشی را فهرست می‌کند. «همهٔ مرورگرها» یا «فقط چهار Browser» بدون نسخه و maturity دقیق نیست. Browser engine، branded browser، OS و device واقعی یکسان نیستند؛ ماتریس را از کاربران/قرارداد و ریسک بگیرید.

برای طراحی coverage به‌جای لوگو، از ماتریس تست سازگاری استفاده کنید. اگر Safari/macOS Hard Gate است، اجرای واقعی همان ترکیب لازم است؛ WebKit آزمایشی روی محیط دیگر ممکن است Proxy کامل نباشد.

Cross-origin، iframe، tab و چند Browser را Probe کنید

Cypress در هر Test با Origin constraints کار می‌کند و برای Origin دوم cy.origin() می‌خواهد؛ cross-origin iframe پشتیبانی محدود دارد. Trade-offs رسمی می‌گوید هم‌زمان دو Browser را کنترل نمی‌کند و multi-tab با plugin ممکن است، نه به‌صورت همان مدل native ساده. Selenium Window handle و sessionهای مستقل دارد، اما orchestration چند Actor را باید خودتان طراحی کنید.

SSO واقعی، درگاه بیرونی، popup OAuth، iframe پرداخت یا collaboration را با Third party بدون مجوز automate نکنید. Contract را به first-party boundary، stub/simulator و verification مناسب بشکنید. قابلیت صرفاً «ممکن است» تا وقتی در Flow واقعی شما اجرا نشده، Fit نیست.

Language Fit با ترجیح شخصی فرق دارد

Selenium bindingهای چندزبان دارد؛ Cypress test code در اکوسیستم JavaScript/TypeScript است. سؤال درست این نیست که Python آسان‌تر یا JS پول‌سازتر است. Runtime و package governance، review capacity، shared libraries، frontend/backend proximity، async model، CI image، hiring/onboarding داخلی و backup owner را بسنجید.

اگر تیم Java/Python عمیق دارد، Selenium ممکن است reuse و review بهتری بدهد؛ اگر Product و تیم روی TypeScript و Component workflow هستند، Cypress ممکن است feedback نزدیک‌تری بدهد. این‌ها فرضیه‌اند و باید در matched change/handoff سنجیده شوند.

مخزن و Supply Chain را هم مقایسه کنید

نسخهٔ language runtime، Selenium/Cypress، Browser/Driver، test runner، assertion/report library، plugins، container/image و third-party action را lock و provenance/upgrade/rollback کنید. «npm install یک دستور است» یا «جامعه بزرگ راه‌حل دارد» TCO و امنیت supply chain را ثابت نمی‌کند.

CANDIDATE BUILD MANIFEST
candidate / version / licence:
language/runtime/package-manager versions:
browser/driver versions and acquisition path:
runner/assertion/report/plugin versions:
lockfile/image/action digests:
registry/proxy/cache/mirror/offline fallback:
install/run commands from clean runner:
secret/network permissions:
upgrade and rollback owner:
known limitations / source URLs / retrieved_at:

Matched Trial یعنی چه چیزهایی یکسان باشند؟

  • همان Build و backend dependency versions؛
  • همان Browser/OS/viewport/locale/timezone در هر Pair؛
  • همان Journey، Actor/Role/Tenant و Risk؛
  • همان Dataset/seed/namespace و pre-state؛
  • همان Oracle و allowed evidence تا حد ممکن؛
  • همان network profile، CI class و resource limits؛
  • همان Fault injection و expected detection؛
  • همان repetitions/warm-up/order randomization؛
  • همان Change request و Receiver handoff؛
  • ثبت deviation هرجا parity فنی ممکن نیست.

«همان تعداد Test» کافی نیست؛ یک Test می‌تواند scope متفاوت داشته باشد. Unit مقایسه را Journey/Claim/Fault قرار دهید و تفاوت معماری را به‌عنوان deviation ثبت کنید، نه اینکه Candidate را مجبور کنید ضدالگوی Candidate دیگر را تقلید کند.

Trial Manifest را پیش از اجرا Freeze کنید

MATCHED TRIAL MANIFEST
trial_id / version / started_at_utc:
decision + candidate versions:
application build + dependency digests:
journeys/claims/faults + expected counts:
browser/OS/viewport/locale/timezone:
CI agent CPU/RAM/network/container:
dataset/seed/namespace/setup/cleanup:
selection/exclusion/skipped:
repetitions/warm-up/order:
retry policy: preserve first attempt
artifacts/redaction/retention:
observers / owner / not_claimed:

اول Correctness، بعد Speed

Candidateای که Fault بحرانی را نمی‌گیرد، به‌خاطر اجرای سریع برنده نمی‌شود. ترتیب Gate: install/run valid → Journey/Oracle correct → target-fault detected → data/state/cleanup safe → Failure diagnosable → representative browser/CI fit → سپس duration/resource/maintenance/cost.

Target-faultهای یکسان طراحی کنید

Faultظاهر گمراه‌کنندهOracle لازم
مبلغ تومان به‌جای IRRReceipt سبز و ۲۰۰canonical amount/currency
Double submitصفحهٔ success یک‌بارone Order/Ledger/Event
Cross-tenant receiptDOM schema مشابهActor/Object authorization
Late callbackeventual successstate transition/order
Stale selector points wrong buttonClick succeedspostcondition/side effect
Loading raceگاهی PASSstate-based actionability/wait
Error leakexpected error pageno secret/PII in UI/network

Fault باید واقعاً mechanism را فعال کند و هر Candidate به دلیل درست FAIL شود. اگر Selenium Failure را از state probe می‌گیرد و Cypress از network+UI، Evidence می‌تواند متفاوت باشد ولی Claim باید یکی بماند.

Locator و Actionability را جدا بسنجید

هر دو Candidate می‌توانند با selector بد شکننده شوند. Locator را بر semantic/test contract و uniqueness بسازید؛ Actionability و Wait را بر state واقعی. CSS/XPath نسبی یا auto-wait به‌تنهایی پایداری را تضمین نمی‌کند. برای contract، trace و repair از راهنمای اتوماسیون UI پایدار استفاده کنید.

Wait را با Sleep یا شعار Auto-wait نسنجید

Selenium Explicit wait می‌تواند condition موردنظر را poll کند؛ Cypress command/query/assertion را با retry-ability اجرا می‌کند. هر دو در برابر شرط اشتباه، event گم‌شده، shared state و side effect async آسیب‌پذیرند. Probe کنید: delayed render، request alias، animation، detached DOM، route transition و eventual backend state.

Flake را با First-attempt تعریف کنید

هر Pair را چندبار با order randomized و state reset اجرا کنید. First-attempt PASS/FAIL، retry attempt، mechanism، environment health و final result جدا ثبت شوند. «پس از Retry سبز» Flake را حذف نمی‌کند. Retry ممکن است diagnostic sample بدهد؛ policy نباید شکست اول را بازنویسی کند.

RUN ATTEMPT RECORD
candidate / run_id / test_id / attempt:
manifest digest / source commit:
started_at / duration / resource class:
setup health / selected count:
first result / retry result / final policy:
failure classification:
evidence refs / diagnosis time:
cleanup status / residual state:
verdict: PASS / FAIL / INCONCLUSIVE / INVALID / NOT_RUN
claim_limit:

Duration را به‌صورت توزیع گزارش کنید

Install، browser startup، setup، test body، artifact generation، upload و cleanup را جدا کنید. N، median، p75/p95، min/max و warm/cold را گزارش دهید؛ Queue time و Cloud upload را مشخص کنید. چند Run کوچک Benchmark عمومی Selenium/Cypress نیست؛ فقط همین Repository/CI/Workload را توصیف می‌کند.

Resource و Parallelism را کنار زمان ببینید

Run کوتاه‌تر با RAM/CPU بیشتر یا ۱۰ Agent شاید گران‌تر باشد. CPU/RAM peak، container size، download/cache، browser processes، workers، shard balance، retries، artifact size و Cloud minutes را ثبت کنید. Parallel speedup بدون data isolation و stable selection ممکن است collision و false result بسازد.

Diagnosis را با Fault کور بسنجید

سه Failure را بدون گفتن علت به Maintainer بدهید. زمان تا first hypothesis، علت درست، evidence used، نیاز به rerun، امکان local reproduction و repair confidence را بسنجید. Selenium می‌تواند screenshot/log/trace integration داشته باشد؛ Cypress command log/screenshot/video/Test Replay دارد، اما Cloud/Plan و data boundary باید جدا لحاظ شود.

Evidence بیشتر همیشه بهتر نیست

Video، screenshot، DOM، network و console ممکن است Token، PII یا transaction data را ثبت کنند. Artifact allowlist، redaction، access، retention و deletion را برای هر Candidate یکسان اعمال کنید. Cloud recording را با local artifact از نظر تشخیص و data governance منصفانه مقایسه کنید.

Change Trial هزینهٔ نگه‌داری را آشکار می‌کند

یک تغییر نماینده اعمال کنید: component markup، route، auth boundary، API response، browser version یا parallel CI. Diff lines شاخص کافی نیست؛ زمان impact analysis، تعداد artifactهای تغییرکرده، review effort، failures unrelated، diagnosis، repair، rerun و documentation/handoff را ثبت کنید.

MATCHED CHANGE RECORD
change_id / rationale / source:
same product change applied to both candidates:
affected journeys/contracts:
predicted impact before run:
files/tests/helpers/config touched:
review and repair minutes:
unrelated failures / retries:
target-fault retained:
clean CI result / evidence:
receiver understanding / rollback:
maintenance verdict / limits:

Handoff را به نفر دوم واگذار کنید

Receiver بدون cache و تنظیمات نویسنده باید install، run، failure diagnosis، test addition، change و cleanup را انجام دهد. Skill gap را از Tool defect جدا کنید، اما training/onboarding cost واقعی را ثبت کنید. ابزار «آسان» اگر فقط نویسنده می‌فهمد یا backup owner ندارد، Fit سازمانی ضعیفی دارد.

TCO را با قیمت Licence یکی نگیرید

هزینهاندازه‌گیریدام رایج
BuildPoC/framework/docs/trainingرایگان‌بودن package
RunCI compute, Grid/Cloud, storage, networkفقط duration
Maintainchange/flake/upgrade/triageتعداد Test
Operateaccess, secrets, incidents, backupsنادیده‌گرفتن ownership
Exitexport/migration/dual-run/retrainingفرض lock-in صفر
Opportunityfeedback delay/coverage gapتبدیل به درآمد قطعی

TCO را با range و assumption بنویسید. کاهش Run time به‌تنهایی ROI یا درآمد بیشتر نیست؛ Counterfactual و Outcome مشترک محصول لازم‌اند.

بازار کار ایران را چگونه بدون داستان‌سازی بسنجیم؟

نام اسنپ، دیجی‌کالا، تپسی، بانک یا «استارتاپ پولدار» را بدون آگهی/Repository/اظهار رسمی تاریخ‌دار به ابزار نسبت ندهید. یک Market Evidence Pack با window، platform، query، location، remote، contract type، dedup rule و raw sample بسازید. Job title و keyword hit را با task requirement یکی نگیرید.

MARKET EVIDENCE RECORD
snapshot_id / retrieved_at / platform:
query and Persian/English variants:
location / remote / contract / level:
visible population / inaccessible pages:
dedup by employer-role-location-date:
tool mention: required / preferred / contextual / legacy maintenance
co-skills: language, CI, API, SQL, architecture, cloud
tasks and seniority evidence:
sample size / missingness / bias:
claim allowed: observed in this sample only
not_claimed: total market, causal salary premium, future demand

برای دادهٔ فعلی حقوق و روش مقایسهٔ Role/Offer، راهنمای حقوق تست نرم‌افزار در ایران را بخوانید. آن مقاله نیز ابزار را علت حقوق نمی‌داند.

Keyword count مساوی فرصت شغلی نیست

یک آگهی ممکن است Selenium را در لیست طولانی ابزارها، Cypress را به‌عنوان preferred، یا هر دو را در متن کپی‌شده بیاورد. Vacancy تکراری، Recruitment agency، تاریخ منقضی، چند شهر و نام شرکت پنهان bias می‌سازند. باید وظیفه، must-have، Level و stack را Coding کنید و uncertainty را نگه دارید.

حقوق را به ابزار نسبت ندهید

حقوق به Role، Level، autonomy، consequence، Location، Contract، صنعت، ساعت/on-call، زبان، architecture، CI و Offer بستگی دارد. شخصی که Cypress و frontend engineering می‌داند شاید Role متفاوتی با Maintainer Selenium داشته باشد؛ تفاوت pay اثر «کلمهٔ ابزار» نیست. هیچ شاهد معتبری برای دوبرابرشدن حقوق، بالاتررفتن خودکار در بازه یا امنیت شغلی وجود ندارد.

برای یادگیری فردی هم Matched Task بسازید

اگر هدف یادگیری است، دو Probe کوچک با همان Journey بسازید و زمان تا فهم/توضیح/Debug/Change را ثبت کنید. Completion tutorial شایستگی نیست. Evidence خوب شامل code review، target-fault، clean setup و انتقال به Task تازه است؛ نه تعداد ویدئو یا ابزارهای رزومه.

«با Python+Selenium شروع کن چون ورود را تضمین می‌کند» و «Cypress حتماً آسان‌تر است» نسخهٔ عمومی نیست. تجربهٔ زبان و Task شما تعیین‌کننده‌اند. برای طراحی انتقال مهارت، مسیر شایستگی تست دستی به اتوماسیون را ببینید.

مهاجرت ابزار کمتر از دو هفته تضمین نیست

Syntax شاید سریع منتقل شود؛ معماری، async model، fixtures، network/origin، reporting، CI, plugins، debugging، data/state و team conventions زمان متفاوت دارند. Migration را با inventory، parity claims، dual run، fault detection، coverage gap، change trial و rollback بسنجید؛ calendar promise ندهید.

MIGRATION CONTRACT
source / target / versions:
why migrate / decision threshold:
inventory by risk and business claim:
KEEP / PORT / REDESIGN / RETIRE:
semantic parity and known non-parity:
dual-run window / first-attempt results:
data/state/evidence/report mapping:
skills/owners/training:
rollback / stop conditions:
residual coverage gap / review_at:

Hybrid ممکن است پاسخ درست باشد

ممکن است Selenium برای cross-browser/Grid و Cypress برای Component/E2E نزدیک frontend مفید باشد. Hybrid فقط وقتی سالم است که duplicate coverage، دو data model، دو CI/report/secret path و skill fragmentation مدیریت شوند. «هر دو را یاد بگیر» بدون Task و ownership هزینه را دو برابر می‌کند، نه Capability را.

Scorecard باید شواهد و Confidence داشته باشد

CANDIDATE SCORE RECORD
criterion / weight / hard_gate:
measurement definition / unit:
Selenium result / evidence / confidence:
Cypress result / evidence / confidence:
deviation / alternative explanation:
cost and risk:
decision impact:
owner / reviewed_at / expires_at:

امتیاز ۱ تا ۵ بدون anchor بازی‌پذیر است. برای Setup مثلاً ۱=clean install fail، ۳=با workaround مستند، ۵=clean install تکرارپذیر با offline fallback؛ برای Diagnosis anchor مستقل بسازید. Unknown را صفر یا میانگین نکنید.

Decision Record باید LIMIT و INCONCLUSIVE را بپذیرد

SELENIUM-CYPRESS DECISION
decision_id / scope / as_of:
hard-gate results:
matched-trial summary and deviations:
critical fault detection:
diagnosis / maintenance / handoff:
TCO range / assumptions:
market evidence boundary:
options considered:
decision: ADOPT / KEEP / LIMIT / HYBRID / MIGRATE / REJECT / INCONCLUSIVE
rationale / authority / dissent:
pilot boundaries / stop conditions:
review_at / correction triggers:
not_claimed: universal winner, hiring, salary, career security

آزمایشگاه مصنوعی ایران: Benchmark نابرابر چگونه دروغ می‌گوید؟

SYN-SEL-CYP-MATCH-IR-01 کاملاً ساختگی و Offline است: Checkout، Order، PaymentAttempt، PSP Stub، Callback، Ledger و Reconciliation واقعی نیستند؛ هیچ learner/worker/employer/repository/product/customer/payment/secret/salary/hiring outcome وجود ندارد. پول canonical برابر IRR و تومان فقط presentation label است؛ UTC و Asia/Tehran/Jalali تفکیک شده‌اند.

UNFAIR INPUT
Selenium: 30 tests × Chrome+Firefox+Edge; cold Grid; screenshots all steps
Cypress: 10 happy paths × Electron; warm cache; no state probes; no upload
one sample: Selenium 45s, Cypress 28s
market: 12 duplicated Selenium keyword hits vs 4 Cypress hits
salary: invented tool premium
declaration: CYPRESS_FASTER_HIGHER_PAY_FUTURE_WINNER

AUDIT
decision: HOLD
reasons: different scope/browser/cache/evidence/oracle/N; duplicate jobs;
no Role/Level/Location/Offer comparability; no target-fault or handoff

در نسخهٔ اصلاحی، هر دو Candidate همان سه Journey، Chrome نسخهٔ یکسان، Build/Data/CI/resource، ۳۰ repetition، order randomized، first-attempt، artifacts محدود، faultهای مبلغ/duplicate/tenant و Change/Handoff را اجرا می‌کنند. نتیجهٔ فرضی فقط برای این Fixture می‌تواند مثلاً Selenium=KEEP برای cross-browser lane و Cypress=LIMITED PILOT برای component/diagnosis باشد؛ هیچ «برندهٔ بازار» یا عدد درآمدی تولید نمی‌شود.

آزمایش تکرارپذیر: ۸۹۶ کنترل در برابر پنج شعار

یک Validator مستقل و بدون dependency نوشتیم. ممیز سطحی امنیت شغلی Selenium، دوبرابرشدن حقوق Cypress، کندی همیشگی Selenium، Flake-free بودن Cypress و مهاجرت دو‌هفته‌ای را آماده می‌پذیرد؛ ممیز ساختاری ۶۴ گروه را با ۱۴ کنترل یکتا بررسی می‌کند.

$ node selenium-cypress-matched-trial-validator.js
SELENIUM_JOB_SECURITY_CYPRESS_DOUBLE_SALARY_FAST_FLAKE_FREE_TWO_WEEK_SWITCH_READY
HOLD-896
NO_REAL_LEARNER_EMPLOYER_REPOSITORY_PRODUCT_SALARY_PASS
READY_FOR_SELENIUM_CYPRESS_MATCHED_TRIAL_REVIEW-0

خط اول عمداً غلط است. HOLD-896 نبود قرارداد مقایسه را آشکار می‌کند. خط سوم نبود هر هدف واقعی را تأیید می‌کند. خروجی آخر فقط کامل‌بودن ساختاری Fixture اصلاح‌شده است؛ نه صحت Product، برتری ابزار، Flake rate عمومی، performance، امنیت supply chain، مهارت فرد، استخدام، درآمد یا آیندهٔ بازار.

ایران: دسترسی، Registry، Browser و Cloud را در Trial بگنجانید

npm/PyPI/Maven/NuGet، Browser/Driver download، Docker/Action image، Grid/Cloud dashboard، licence/payment/account و artifact upload ممکن است در شبکه/زمان/سیاست مشخص unavailable باشد. ادعای کلی تحریم یا دسترسی نکنید؛ تاریخ/ISP/endpoint/status و Terms را ثبت کنید. Mirror/cache/offline fallback باید مجاز، versioned و قابل‌به‌روزرسانی باشد.

Cloud feature را اگر Candidate دیگر local است رایگان فرض نکنید؛ data residency، secret/log/video، retention، support، export و exit را بسنجید. دورزدن محدودیت سرویس موضوع مقاله نیست.

AI و Recorder برتری ابزار را ثابت نمی‌کنند

Recorder/Studio/AI می‌تواند scaffold بسازد؛ ولی locator، assertion، data، secret، target-fault و maintenance را انسان بازبینی می‌کند. Prompt یا Cloud نباید Source خصوصی، credential، Production DOM/PII یا Artifact بدون مجوز دریافت کند. نرخ تولید code بدون repair/change trial معیار Fit نیست.

Correction: قابلیت و بازار هر دو تغییر می‌کنند

Browser support، experimental feature، Cloud plan، Manager/Driver، plugin، job sample و salary source تاریخ انقضا دارند. هر Claim باید source/retrieved_at/scope/version داشته باشد. تغییر Product/Browser/CI/Team/market window Trigger بازآزمایی است؛ نتیجهٔ ۱۴۰۳ را برای ۱۴۰۵ یا آینده تکرار نکنید.

CORRECTION RECORD
record_id / previous decision:
changed capability/context/evidence:
source/version/retrieved_at:
affected hard gates/criteria/journeys:
materiality:
action: keep / re-trial / limit / migrate / rollback
owner / due_at:
supersedes / history preserved:
claim_limit:

۲۸ ضدالگوی Selenium vs Cypress

  • خودروی قدیمی در برابر اسپرت مدرن
  • جنگ ابزار و برندهٔ جهانی
  • Selenium استاندارد طلایی/پیر/کند
  • Cypress جوان/همیشه سریع/قابل‌اعتماد
  • تست خودکار ضرورت همهٔ شرکت‌ها
  • نام شرکت ایرانی بدون source
  • بانک=Selenium و استارتاپ=Cypress
  • keyword count بدون dedup/task
  • حقوق بالاتر به‌علت Cypress
  • امنیت شغلی به‌علت Selenium
  • ورود تضمینی با Python+Selenium
  • دوبرابرشدن حقوق با JS+Cypress
  • SDET بودن صرفاً با ابزار
  • Future winner بدون time-bound evidence
  • همهٔ Browserها/قدیمی‌ها بدون version
  • Cypress فقط چند Browser ثابت و منقضی
  • Driver setup همیشه دستی
  • npm install برابر setup کامل
  • Auto-wait برابر no Flake
  • Retry برابر repair
  • one-run duration benchmark
  • Scope/Browser متفاوت در comparison
  • Mock/stub متفاوت بدون deviation
  • Line count برابر maintainability
  • Cloud artifact بدون data cost
  • Hybrid بدون duplicate/TCO control
  • مهاجرت تضمینی زیر دو هفته
  • امتیاز میانگین برای پوشاندن Hard Stop

چک‌لیست ۴۴ سؤالی Trial

  1. Decision و alternatives روشن‌اند؟
  2. Authority و dissent ثبت شده؟
  3. Role/Task/Work product واقعی است؟
  4. User/Browser/Support contract وجود دارد؟
  5. Risk و Fault هدف تعیین شده؟
  6. Hard Gate از score جداست؟
  7. Candidate/version/licence پین است؟
  8. Official capability source تاریخ‌دار است؟
  9. Language/runtime با review capacity هم‌خوان است؟
  10. Browser/OS matrix دقیق است؟
  11. Origin/iframe/window/multi-browser probe شده؟
  12. Repository/lockfile/image/action pin شده؟
  13. Clean install در CI انجام شده؟
  14. Registry/proxy/cache/mirror ثبت است؟
  15. Build/dependency versions یکسان‌اند؟
  16. Journey/Actor/Role/Tenant یکسان‌اند؟
  17. Data/seed/namespace یکسان است؟
  18. Setup/Cleanup و residual state سنجیده می‌شود؟
  19. Browser/viewport/locale/timezone یکسان‌اند؟
  20. CI CPU/RAM/network class یکسان است؟
  21. Selection و expected count برابر است؟
  22. Deviationها قبل از Result ثبت شده‌اند؟
  23. Oracle/Claim یکی مانده؟
  24. Faultهای critical هر دو را می‌کشند؟
  25. Locator/actionability جدا سنجیده‌اند؟
  26. Wait mechanism با race واقعی Probe شده؟
  27. Repetition/warm-up/order تعریف شده؟
  28. First-attempt از Retry جداست؟
  29. Duration components و distribution ثبت است؟
  30. CPU/RAM/parallelism/artifact cost ثبت است؟
  31. Failure blind diagnosis اجرا شده؟
  32. Evidence allowlist/redaction/retention یکسان است؟
  33. Invalid/Inconclusive از Fail جداست؟
  34. Matched Change trial اجرا شده؟
  35. Review/repair/handoff effort ثبت است؟
  36. Receiver clean-room run کرده؟
  37. TCO Build/Run/Maintain/Operate/Exit دارد؟
  38. Market snapshot dedup و coded است؟
  39. Salary از Tool causality جداست؟
  40. Learning evidence به Transfer وصل است؟
  41. Migration parity/rollback دارد؟
  42. Iran access/offline gap ثبت است؟
  43. Decision LIMIT/INCONCLUSIVE را می‌پذیرد؟
  44. Review expiry/correction فعال است؟

برنامهٔ ۳۰روزهٔ Matched Trial

روز ۱–۳: Decision/Task/Risk/Hard Gate؛ روز ۴–۶: Candidate manifests و clean install؛ روز ۷–۱۰: یک Journey و Oracle همسان؛ روز ۱۱–۱۳: Faultها و data/state؛ روز ۱۴–۱۶: Browser/origin/window probes؛ روز ۱۷–۱۹: repetitions/flake/duration/resource؛ روز ۲۰–۲۲: blind diagnosis/evidence؛ روز ۲۳–۲۵: matched change/review؛ روز ۲۶: receiver handoff؛ روز ۲۷: Iran/offline drill؛ روز ۲۸: TCO؛ روز ۲۹: market snapshot boundary؛ روز ۳۰: Decision review. این برنامه تضمین انتخاب یا مهاجرت نیست.

منابع رسمی و محدودیت استناد

  • Selenium Browser docs: قابلیت‌های Browser-specific فعلی؛ نه تضمین parity همهٔ Browserها.
  • Selenium Manager: مدیریت رسمی Driver/Browser در نسخه‌های فعلی و fallback binding؛ نه reproducibility کامل supply chain/CI.
  • Cypress Supported Browsers: Chrome-family/Firefox و WebKit آزمایشی در تاریخ بازیابی؛ نه پوشش user matrix شما.
  • Cypress Trade-offs: مرز general-purpose، browser/origin/multi-browser و plugin؛ نه حکم ضعف یا برتری.
  • Cypress Test Retries: attempt/retry و نمونه علل Flake؛ نه درمان خودکار.
  • Cypress CI: اجرای CI و قابلیت‌های Cloud recording در نسخهٔ فعلی؛ نه الزام Cloud یا برابری cost/data boundary.

صفحات رسمی هر Vendor قابلیت محصول خود را توصیف می‌کنند؛ برای Benchmark مستقل یا ادعای برتری کافی نیستند. Matched Trial این مقاله یک synthesis است، استاندارد Selenium/Cypress نیست.

جمع‌بندی: ابزار را با Fault و Handoff انتخاب کنید

Selenium و Cypress را با سن، هیجان، یک زمان اجرا یا شایعهٔ بازار مقایسه نکنید. Hard Gateها را تعیین، Journey/Browser/Data/Fault/CI را همسان، first-attempt و Evidence را حفظ، Diagnosis و Change و Receiver را امتحان و TCO را محدود کنید. شاید نتیجه KEEP، LIMITED PILOT، HYBRID یا INCONCLUSIVE باشد؛ تصمیم خوب لازم نیست یک برندهٔ جهانی بسازد.

سوالات متداول

برای بازار کار ایران Selenium یاد بگیرم یا Cypress؟

با یک snapshot تاریخ‌دار آگهی و Task هدف تصمیم بگیرید، نه شمارش خام Keyword. Role/Level/Language/CI/API/architecture را Coding کنید و سپس دو Work sample کوچک بسازید. هیچ ابزار به‌تنهایی استخدام یا امنیت شغلی را تضمین نمی‌کند.

Cypress همیشه سریع‌تر و کم‌Flake‌تر است؟

خیر. معماری و auto-wait می‌تواند برای برخی Flowها مزیت بدهد، اما Scope، Browser، CI، Data/State، Oracle و artifact cost تعیین‌کننده‌اند. روی Workload همسان چندبار اجرا و first-attempt Flake را جدا گزارش کنید.

آیا Selenium فقط برای سیستم‌های قدیمی است؟

نه. WebDriver یک استاندارد automation برای Browserهای اصلی و اکوسیستم فعال است؛ Selenium Manager نیز setup Driver را مدرن‌تر کرده است. Fit آن به Task، زبان، Browser/Grid، CI، architecture و هزینه نگه‌داری تیم شما بستگی دارد.

آیا دانستن Cypress حقوق را دو برابر می‌کند؟

شاهد قابل‌اتکایی برای چنین رابطه‌ای نداریم. حقوق به Role، Level، Location، Contract، autonomy، consequences، stack و Offer وابسته است. ابزار می‌تواند یک Skill باشد، نه علت مستقل یا تضمین مبلغ.

چه زمانی Hybrid Selenium و Cypress منطقی است؟

وقتی هرکدام یک Risk/Task جدا را با شواهد بهتر پوشش دهند و دو Repository/Data/CI/Report/Skill path هزینهٔ کنترل‌شده داشته باشد. duplicate coverage، ownership و Exit را ثبت کنید؛ Hybrid پیش‌فرض نیست.

دیدگاهتان را بنویسید