فکر کن تو یه برنامهنویس هستی و داری روی یه پروژه بزرگ کار میکنی. هر بار که یه تغییری تو کدت میدی، باید ساعتها بشینی و دستی همه بخشهای سایت یا نرمافزار رو چک کنی که ببینی درست کار میکنن یا نه. واقعاً عذابآوره که هی باید برگردی و همه چیزو چک کنی. حالا اگه این ابزارهای اتوماسیون تست نبودن، چی میشد؟ شاید هیچ پیشرفتی نمیکردیم و بیشتر وقتمون میرفت تو دیباگ کردن مشکلات ساده و ابتدایی.
اما تو دهه ۲۰۰۰، یه قهرمان به نام Selenium به دادمون رسید. این ابزار فوقالعاده به برنامهنویسا کمک کرد که وبسایتها و نرمافزارهاشون رو بهصورت خودکار تست کنن. یعنی دیگه نیاز نبود ساعتها وقت بذارن برای چک کردن دستی همه چیز. Selenium این کارو برامون انجام میداد و وقت و انرژی بیشتری برای خلاقیت و نوآوری باقی میذاشت. با Selenium، برنامهنویسا میتونستن به جای خسته شدن از تست دستی، روی بهبود کدها و اضافه کردن ویژگیهای جدید تمرکز کنن.
سلنیوم (Selenium) یه ابزار متنباز برای اتوماسیون مرورگرهاست که برای شبیهسازی تعاملات انسانی طراحی شده. این ابزار میتونه کارهایی که یه انسان پشت کامپیوتر انجام میده، مثل کلیک کردن روی دکمهها و تایپ کردن متنها رو تقلید کنه. عمدتاً از Selenium برای اتوماسیون مرورگرها در تست نرمافزار استفاده میشه. Selenium شامل سه محصول اصلیه به نامهای Selenium WebDriver، Selenium IDE و Selenium Grid و یک محصول هم با نام Selenium RC که منسوخ شده. هر کدوم از این ابزارها ویژگیها و کاربردهای خاص خودشونو دارن که در ادامه به بررسی اونها میپردازیم.
اولین ابزار از این مجموعه، Selenium IDE هست. Selenium IDE یه افزونه برای مرورگرهای Firefox و Chrome هست که به کاربران این امکان رو میده تا تستهای خودکار رو ضبط و پخش کنن. این ابزار برای کسایی که تازه با تست خودکار آشنا میشن، خیلی مناسبه چون استفاده از اون خیلی ساده و کاربردیه.
تصور کن که یه افزونه تو مرورگرت نصب میکنی و بعد میتونی با کلیک کردن و انجام دادن کارهایی که تو سایتت انجام میدی، یه تست خودکار بسازی. این تست تمام کارهایی که تو انجام دادی رو ضبط میکنه و بعداً میتونه همون کارها رو خودش انجام بده تا مطمئن بشه که همه چیز درست کار میکنه. پس از ضبط، میتونی تستها رو پخش کنی و ببینی که آیا سایتت درست کار میکنه یا نه. خیلی راحت و جذابه، نه؟
حالا بریم سراغ Selenium RC. این ابزار بهت اجازه میده تستهای خودکار رو در برابر مرورگرهای مختلف و روی سیستمهای عامل مختلف اجرا کنی. این یعنی تو میتونی با استفاده از زبانهای برنامهنویسی مختلف مثل Java، C#, PHP، Python و Perl تستهای خودت رو بنویسی و اجرا کنی.
فرض کن که تو میخوای تستهایی رو بنویسی که توی مرورگرهای مختلف مثل Chrome، Firefox، Safari و Edge اجرا بشن. Selenium RC این امکان رو بهت میده. ولی باید بدونی که این ابزار دیگه منسوخ شده و جای خودش رو به WebDriver داده که خیلی پیشرفتهتر و کارآمدتره. البته اگه همچنان با Selenium RC کار کنی، میتونی ازش استفاده کنی، ولی بهتره که به ابزارهای جدیدتر مهاجرت کنی.
و اما WebDriver، نسل بعدی Selenium RC هست و امروزه بهعنوان هسته اصلی Selenium شناخته میشه. WebDriver بهت اجازه میده تا مستقیماً با مرورگرها ارتباط برقرار کنی و تستهای خودکار رو اجرا کنی. این ابزار از مرورگرهای مختلف مثل Chrome، Firefox، Safari و Edge پشتیبانی میکنه و بهطور کلی سریعتر و پایدارتر از Selenium RC هست.
تصور کن که میخوای تستهایی بنویسی که مستقیماً با مرورگرها تعامل داشته باشن. WebDriver این امکان رو بهت میده. مثلاً میتونی تستی بنویسی که توی مرورگر Chrome باز بشه، یه فرم رو پر کنه، دکمه ارسال رو بزنه و بعد نتیجه رو بررسی کنه. همه این کارها رو WebDriver خیلی سریع و با دقت انجام میده. به خاطر همین سرعت و پایداری بالا، WebDriver خیلی محبوب شده و به عنوان استانداردی در تست خودکار وب شناخته میشه.
حالا نوبت میرسه به Selenium Grid. Selenium Grid ابزاریه که بهت امکان میده تستهای خودکار رو بهصورت موازی روی چندین ماشین و مرورگر مختلف اجرا کنی. این ویژگی خیلی کاربردیه، مخصوصاً وقتی که نیاز داری تستهای خودت رو در مقیاس بزرگ و روی سیستمهای مختلف اجرا کنی.
فرض کن که یه پروژه بزرگ داری و میخوای تستهات رو همزمان روی مرورگرهای مختلف و سیستمعاملهای مختلف اجرا کنی. Selenium Grid این امکان رو بهت میده. میتونی تستهات رو روی چندین مرورگر و سیستمعامل بهصورت همزمان اجرا کنی و نتایج رو دریافت کنی. این ویژگی به خصوص برای شرکتهایی که نیاز به تست در مقیاس بزرگ دارن، خیلی مفیده. مثلاً یه شرکت بزرگ مثل نتفلیکس میتونه با استفاده از Selenium Grid، تستهای خودکارش رو روی هزاران مرورگر و سیستمعامل مختلف اجرا کنه و مطمئن بشه که همه چیز درست کار میکنه.
حالا بیا تصور کنیم اگه Selenium و ابزارهای مشابه نبودن، چی میشد؟ برنامهنویسا و تستنویسها باید همه تستها رو دستی انجام میدادن. هر بار که تغییری تو کدها میدادن، باید ساعتها وقت میذاشتن تا همه چیزو چک کنن. این یعنی تاخیرهای بزرگ تو توسعه و بهروزرسانی نرمافزارها. دنیای تکنولوژی به این سرعت و پیشرفت نمیرسید و احتمالاً هنوز درگیر حل مشکلات ساده بودیم.
بدون Selenium، ما باید هر تغییر کوچیکی رو با دست تست میکردیم که ممکن بود روزها یا حتی هفتهها زمان ببره. علاوه بر این، خطاهای انسانی هم خیلی بیشتر میشدن. هرچند که ما آدما تو فکر کردن و خلاقیت بهترینیم، ولی وقتی به دقت و تکرار نیاز داریم، ماشینها خیلی بهتر از ما عمل میکنن. پس بدون ابزارهای اتوماسیون تست، ما هیچوقت به این سطح از سرعت و دقت تو توسعه نرمافزارها نمیرسیدیم.
حالا ممکنه بپرسی چرا باید اصلاً درباره Selenium بدونی؟ خیلی سادهست! اگه یه روزی خواستی وارد دنیای برنامهنویسی و توسعه وب بشی، یا حتی اگه فقط بخوای یه وبسایت کوچیک راه بندازی، باید بدونی چطور مطمئن بشی که سایتت به درستی کار میکنه. Selenium میتونه کمک کنه تا خیلی راحت و بدون دردسر، تستهای خودکار برای وبسایتت بنویسی و از درست بودن عملکردش مطمئن بشی.
تصور کن یه پروژهای رو شروع کردی و برای تست اون نیاز داری که هر بار که تغییری میدی، همه چیزو دستی چک کنی. این کار نه تنها زمان زیادی میگیره، بلکه خیلی خستهکننده هم هست. اما با Selenium، میتونی بهراحتی تستهایی بنویسی که بهصورت خودکار اجرا بشن و بهت بگن که آیا کدهای جدیدت درست کار میکنن یا نه. این کار بهت اجازه میده وقت بیشتری برای خلاقیت و نوآوری داشته باشی و نگرانی کمتری از بابت خطاهای غیرمنتظره.
Selenium توسط Jason Huggins در سال ۲۰۰۴ ساخته شد. اون موقع Jason بهعنوان مهندس نرمافزار تو شرکت ThoughtWorks کار میکرد و برای تست خودکار برنامههای وب، به یه ابزار نیاز داشت. از همینجا بود که Selenium به دنیا اومد. Selenium در ابتدا بهعنوان یه ابزار داخلی استفاده میشد، اما به مرور زمان به یه پروژه متنباز تبدیل شد و حالا یکی از پرکاربردترین ابزارهای تست خودکار وب تو دنیاست.
شاید برات جالب باشه بدونی چرا اسم این ابزار Selenium گذاشته شد. داستان از این قراره که یه زمانی ابزار معروفی به نام Mercury QuickTest Professional وجود داشت. Jason به شوخی گفت که Selenium (که یه ماده شیمیاییه) پادزهری برای Mercury است. همین شد که نام Selenium برای این ابزار انتخاب شد.
وقتی صحبت از تست خودکار وبسایتها و نرمافزارها میشه، Selenium یکی از بهترین انتخابهاست. اما چرا؟ بیایید نگاهی بندازیم به مزایای استفاده از Selenium در تست خودکار.
یکی از بزرگترین مزایای Selenium اینه که از چندین زبان برنامهنویسی معروف پشتیبانی میکنه. یعنی اگه تو به JavaScript، Python، Java، PHP، Ruby یا C# مسلط باشی، میتونی به راحتی با Selenium کار کنی بدون اینکه نیاز باشه یه زبان جدید یاد بگیری. البته Selenium خودش یه سینتکس خاص داره، اما اگه به یکی از این زبانها مسلط باشی، خیلی راحتتر میتونی باهاش کار کنی.
یکی از مشکلات بزرگ تست وبسایتها، سازگاری با مرورگرهای مختلفه. اما Selenium این مشکل رو حل کرده. Selenium از طریق درایورها با مرورگرها ارتباط برقرار میکنه و میتونه با نسخههای مختلف مرورگرها سازگار بشه. مثلاً میتونی با درایور مناسب، تستهات رو روی مرورگرهای معروفی مثل Chrome، Firefox، Safari، Edge و Opera اجرا کنی.
یکی دیگه از مزایای Selenium اینه که روی پلتفرمهای مختلف کار میکنه. یعنی میتونی تستهات رو روی یه پلتفرم بنویسی و روی یه پلتفرم دیگه اجرا کنی. این ویژگی خیلی کار رو راحت میکنه، چون بدون هیچ دردسری میتونی تستهات رو روی ویندوز، مک، یا انواع توزیعهای لینوکس اجرا کنی.
Selenium یه ابزار اپنسورسه و تاریخچه طولانی داره. به همین خاطر، یه جامعه کاربری قوی داره که همیشه آماده کمک هستن. این پشتیبانی شامل بهروزرسانیها، مستندات جامع و منابع آموزشی فراوان میشه. هر سوالی داشته باشی، احتمالاً کسی قبلاً اون رو پرسیده و جوابش رو توی اینترنت پیدا میکنی.
Selenium تو زمینه یکپارچهسازی با ابزارهای دیگه هم خیلی خوب عمل میکنه. این ابزار بهت امکان میده که از پلاگینهای موجود استفاده کنی یا حتی پلاگینهای سفارشی خودت رو بسازی تا قابلیتهای Selenium رو افزایش بدی. این ویژگی باعث میشه که بتونی ابزار تست خودکارت رو دقیقاً به شکلی که نیاز داری، تنظیم کنی.
یکی از ویژگیهای جذاب Selenium اینه که میتونی تستهات رو به صورت موازی روی چندین ماشین اجرا کنی. این قابلیت از طریق ابزار Selenium Grid فراهم شده. با این ویژگی، میتونی تستهات رو بهصورت همزمان روی مرورگرها و پلتفرمهای مختلف اجرا کنی و از یه مرکز مدیریت واحد برای تنظیمات مرورگرها استفاده کنی. این کار سرعت تستهات رو خیلی افزایش میده و بهت کمک میکنه که نتایج دقیقتری بگیری.
در نهایت، Selenium یه ابزار قدرتمند و انعطافپذیر برای تست خودکار وبسایتها و نرمافزارهاست. از پشتیبانی از زبانهای مختلف برنامهنویسی گرفته تا سازگاری با مرورگرها و پلتفرمهای مختلف، همه چیز رو پوشش میده. پشتیبانی قوی جامعه کاربری و قابلیت یکپارچهسازی با ابزارهای دیگه، این ابزار رو به یکی از بهترین انتخابها برای تست خودکار تبدیل کرده. پس اگه میخوای وارد دنیای تست خودکار بشی، Selenium یکی از بهترین انتخابهاست.
استفاده از Selenium برای تست خودکار وبسایتها و نرمافزارها خیلی جذابه، اما این ابزار هم محدودیتهایی داره که باید باهاشون آشنا باشی. در ادامه به بررسی این محدودیتها میپردازیم و باهم ترکیبشون میکنیم تا تصویر کاملتری از ماجرا به دست بیاریم.
یکی از مشکلات اصلی Selenium اینه که چون یه ابزار متنباز (open-source) هست، جامعه توسعهدهنده گسترده و پشتیبانی فنی قوی و متمرکزی نداره. یعنی اگه به مشکلی بربخوری، نمیتونی به یه تیم پشتیبانی رسمی و حرفهای تکیه کنی. البته جامعه کاربری قوی داره و خیلی از سوالها و مشکلاتت توی فرومها و منابع آنلاین پاسخ داده میشه، ولی این پشتیبانی همیشه به اندازه پشتیبانی رسمی قابل اعتماد نیست.
Selenium به طور خاص برای تست وبسایتها طراحی شده و نمیتونه اپلیکیشنهای موبایل یا دسکتاپ رو تست کنه. این یه محدودیت بزرگه، چون اگه بخوای یه اپلیکیشن موبایل یا دسکتاپ رو تست کنی، باید از ابزارهای دیگهای مثل Appium برای موبایل یا ابزارهای خاص تست دسکتاپ استفاده کنی.
Selenium در تست تصاویر و عناصر گرافیکی محدودیت داره. یعنی اگه بخوای صحت نمایش تصاویر یا عناصر گرافیکی رو بررسی کنی، Selenium ابزارهای کافی برای این کار نداره. برای این نوع تستها باید از ابزارهای دیگهای مثل SikuliX که مخصوص تست تصاویر هستن استفاده کنی.
Selenium به تنهایی امکانات مدیریت تست کاملی رو فراهم نمیکنه. برای مدیریت تستها، گزارشگیری و سازماندهی تستها، باید از ابزارهای مکمل استفاده کنی. مثلاً برای زبان جاوا میتونی از JUnit و TestNG استفاده کنی که بهت کمک میکنن تستهات رو بهتر مدیریت کنی و گزارشهای دقیقتری از نتایج تستها به دست بیاری. این ابزارها امکان دستهبندی و اجرای تستها رو فراهم میکنن و بهت اجازه میدن تا به راحتی مشکلات رو پیگیری و رفع کنی.
در زبانهای دیگه هم ابزارهای مشابهی وجود داره. برای مثال، در زبان PHP میتونی از PHPUnit استفاده کنی که یه فریمورک تست قوی برای PHP هست و امکانات مدیریت تستهای مختلف رو بهت میده. با استفاده از PHPUnit میتونی تستهای واحد (unit tests) بنویسی، اجرای تستها رو زمانبندی کنی و گزارشهای جامع و دقیقی از نتایج تستها بگیری.
این ابزارهای مکمل بهت کمک میکنن که فرآیند تستهات رو بهتر سازماندهی کنی و از کارایی بیشتری برخوردار بشی. پس اگه از Selenium برای تست خودکار استفاده میکنی، حتماً به فکر استفاده از این ابزارهای مکمل هم باش تا تجربه بهتری از مدیریت و اجرای تستها داشته باشی.
برای استفاده موثر از Selenium، باید دانش برنامهنویسی داشته باشی. چون بسیاری از تستها نیاز به نوشتن کد دارن. اگه به یکی از زبانهای برنامهنویسی مثل Java، Python، PHP، JavaScript یا C# مسلط باشی، میتونی به راحتی از Selenium استفاده کنی. اما اگه هیچ تجربهای در برنامهنویسی نداری، ممکنه استفاده از این ابزار برایت چالشبرانگیز باشه و نیاز به یادگیری زبانهای برنامهنویسی داشته باشی.
حتی با اینکه Selenium WebDriver یکی از بهترین ابزارها برای اتوماسیون تستها روی دستگاههای مختلفه، اما خودش هم محدودیتهایی داره. بیایید به بعضی از این محدودیتها نگاهی بندازیم:
یکی دیگه از محدودیتهای Selenium اینه که اجرای تستها ممکنه کند باشه. چون اتوماسیون به درایورهای مختلف مرورگرها وابستهست، این موضوع میتونه باعث بشه که فرآیند تستها کند بشه. مخصوصاً وقتی داری تستهای بزرگ روی وبسایتهای بزرگ اجرا میکنی، ممکنه Selenium به کندی پاسخ بده.
Selenium در تعامل با عناصر داینامیک وب ممکنه دچار مشکل بشه. مثلاً اگه شناسه (ID) یه عنصر توی صفحه وب تغییر کنه، ممکنه اسکریپت تست دچار مشکل بشه و تستها شکست بخورن. این موضوع میتونه اجرای تستها رو پیچیدهتر کنه و نیاز به بهروزرسانی مداوم تستها داشته باشی.
Selenium برای تست اپلیکیشنهای ویندوزی هم محدودیت داره. برای انجام تست اتوماسیون روی اپلیکیشنهای دسکتاپ، معمولاً باید از ابزارها یا کتابخانههای ثالث استفاده کنی که این موضوع میتونه پیچیدگیهای خاص خودش رو داشته باشه.
اگه میخوای وارد دنیای تست خودکار بشی و از Selenium استفاده کنی، باید بدونی که چطور شروع کنی. خب، اینجا میخوام بهت بگم چطور قدم به قدم پیش بری تا بتونی از این ابزار فوقالعاده استفاده کنی. از نصب ابزارهای لازم گرفته تا نوشتن اولین تست، همه چیز رو برات توضیح میدم.
اولین قدم اینه که یکی از زبانهای برنامهنویسی پشتیبانیشده توسط Selenium رو انتخاب کنی. این زبانها شامل Python، Java، C#، Ruby، PHP، JavaScript (Node.js)، و Go هستن. برای مثال، ما اینجا از Python استفاده میکنیم، اما در ادامه مثالهایی هم با زبانهای دیگه برات میزنم.
برای نصب Selenium، باید ابزارهای لازم رو به ترتیب نصب کنی. بسته به زبانی که انتخاب کردی، روش نصب کمی متفاوت خواهد بود. در اینجا نصب برای Python، PHP، Java، C#، Ruby، Node.js و Go رو توضیح میدم.
نصب Selenium: حالا وقتشه که Selenium رو نصب کنی. کافیه تو ترمینال یا خط فرمان بنویسی:
pip install selenium
نصب Selenium WebDriver برای PHP: با استفاده از Composer، Selenium WebDriver رو نصب کن:
composer require php-webdriver/webdriver
نصب Selenium WebDriver: از طریق Maven یا Gradle، Selenium WebDriver رو به پروژهات اضافه کن. برای Maven:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
نصب Selenium WebDriver: از طریق NuGet، Selenium WebDriver رو به پروژهات اضافه کن:
Install-Package Selenium.WebDriver
نصب Selenium WebDriver: با استفاده از gem، Selenium WebDriver رو نصب کن:
gem install selenium-webdriver
نصب Selenium WebDriver: با استفاده از npm، Selenium WebDriver رو نصب کن:
npm install selenium-webdriver
نصب Selenium WebDriver: از کتابخانه selenium-go استفاده کن:
go get -u github.com/tebeka/selenium
برای اینکه بتونی مرورگرها رو با Selenium کنترل کنی، باید WebDriver مربوط به اون مرورگر رو نصب کنی. مثلاً اگه میخوای از Chrome استفاده کنی، باید ChromeDriver رو نصب کنی.
مرورگرهای پشتیبانیشده در Selenium WebDriver در جدول زیر آمده:
مرورگر | وبدرایور مخصوص مرورگر | سیستمعاملهای پشتیبانی شده |
---|---|---|
Google Chrome | ChromeDriver | Windows/macOS/Linux |
Mozilla Firefox | GeckoDriver | Windows/macOS/Linux |
Microsoft Edge | Microsoft Edge WebDriver | Windows/macOS/Linux |
Safari | SafariDriver (in-built) | macOS High Sierra و جدیدتر |
حالا که همه چیز رو نصب کردی، وقتشه که اولین تست خودکار رو بنویسی. بیایید با زبانهای مختلف شروع کنیم.
from selenium import webdriver
# تنظیمات WebDriver برای Chrome
driver = webdriver.Chrome()
# باز کردن وبسایت 7Learn
driver.get("https://www.7learn.com")
# بررسی عنوان صفحه
assert "7Learn" in driver.title
# بستن مرورگر
driver.quit()
<?php
require_once('vendor/autoload.php');
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
// تنظیمات WebDriver برای Chrome
$driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', DesiredCapabilities::chrome());
// باز کردن وبسایت 7Learn
$driver->get('https://www.7learn.com');
// بررسی عنوان صفحه
assert(strpos($driver->getTitle(), '7Learn') !== false);
// بستن مرورگر
$driver->quit();
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
WebDriver driver = new ChromeDriver();
driver.get("https://www.7learn.com");
if (driver.getTitle().contains("7Learn")) {
System.out.println("Test Passed");
} else {
System.out.println("Test Failed");
}
driver.quit();
}
}
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
class Program {
static void Main(string[] args) {
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.7learn.com");
if (driver.Title.Contains("7Learn")) {
Console.WriteLine("Test Passed");
} else {
Console.WriteLine("Test Failed");
}
driver.Quit();
}
}
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.navigate.to "https://www.7learn.com"
if driver.title.include? "7Learn"
puts "Test Passed"
else
puts "Test Failed"
end
driver.quit
const { Builder, By, until } = require('selenium-webdriver');
(async function example() {
let driver = await new Builder().forBrowser('chrome').build();
try {
await driver.get('https://www.7learn.com');
let title = await driver.getTitle();
if (title.includes("7Learn")) {
console.log("Test Passed");
} else {
console.log("Test Failed");
}
} finally {
await driver.quit();
}
})();
package main
import (
"fmt"
"github.com/tebeka/selenium"
)
func main() {
const (
seleniumPath = "vendor/selenium-server.jar"
chromeDriverPath = "vendor/chromedriver"
)
opts := []selenium.ServiceOption{}
service, err := selenium.NewChromeDriverService(chromeDriverPath, 4444, opts...)
if err != nil {
panic(err)
}
defer service.Stop()
caps := selenium.Capabilities{"browserName": "chrome"}
wd, err := selenium.NewRemote(caps, "")
if err != nil {
panic(err)
}
defer wd.Quit()
wd.Get("https://www.7learn.com")
title, err := wd.Title()
if err != nil {
panic(err)
}
if title == "7Learn" {
fmt.Println("Test Passed")
} else {
fmt.Println("Test Failed")
}
}
تا اینجا فهمیدیم که Selenium چیه و چه امکاناتی داره. حالا بریم چند تا مثال عملی با هم ببینیم تا بهتر متوجه بشی چطور میتونی از این ابزار فوقالعاده استفاده کنی. مثالهارو با زبان پایتون میریم. آمادهای؟ شروع کنیم!
تو این مثال، میخوایم یه تست بنویسیم که به یه وبسایت لاگین کنه و بعد بررسی کنه که آیا لاگین موفقیتآمیز بوده یا نه. این یه سناریوی ساده و کاربردیه که خیلی وقتا به درد میخوره.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# تنظیمات WebDriver برای Chrome
driver = webdriver.Chrome()
# باز کردن وبسایت مورد نظر
driver.get("https://example.com/login")
# پیدا کردن فیلدهای لاگین و پر کردن اونها
username = driver.find_element_by_name("username")
password = driver.find_element_by_name("password")
username.send_keys("myusername")
password.send_keys("mypassword")
password.send_keys(Keys.RETURN)
# بررسی موفقیتآمیز بودن لاگین
assert "Dashboard" in driver.title
# بستن مرورگر
driver.quit()
تو این کد، اول وبسایت مورد نظر رو باز میکنیم، فیلدهای لاگین رو پیدا میکنیم و اطلاعات کاربری رو وارد میکنیم. بعد از ارسال فرم، بررسی میکنیم که آیا عنوان صفحه شامل "Dashboard" هست یا نه.
تو این مثال، میخوایم یه تست بنویسیم که یه جستجو در گوگل انجام بده و نتایج رو بررسی کنه. این سناریو هم خیلی کاربردیه و میتونه تو خیلی از پروژهها به دردت بخوره.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# تنظیمات WebDriver برای Chrome
driver = webdriver.Chrome()
# باز کردن گوگل
driver.get("https://www.google.com")
# پیدا کردن فیلد جستجو و انجام جستجو
search_box = driver.find_element_by_name("q")
search_box.send_keys("7Learn")
search_box.send_keys(Keys.RETURN)
# بررسی نتایج جستجو
assert "7Learn" in driver.page_source
# بستن مرورگر
driver.quit()
تو این کد، اول گوگل رو باز میکنیم، فیلد جستجو رو پیدا میکنیم و عبارت "7Learn" رو جستجو میکنیم. بعد از نمایش نتایج، بررسی میکنیم که آیا صفحه شامل عبارت "7Learn" هست یا نه.
تو این مثال، میخوایم یه تست بنویسیم که تمام لینکهای یه صفحه وب رو بررسی کنه و لینکهای خراب رو گزارش بده. این سناریو هم خیلی مفیده و میتونه به بهبود کیفیت وبسایت کمک کنه.
from selenium import webdriver
import requests
# تنظیمات WebDriver برای Chrome
driver = webdriver.Chrome()
# باز کردن وبسایت مورد نظر
driver.get("https://example.com")
# پیدا کردن تمام لینکها
links = driver.find_elements_by_tag_name("a")
# بررسی لینکها
for link in links:
url = link.get_attribute("href")
if url:
response = requests.head(url)
if response.status_code != 200:
print(f"Broken link: {url}")
# بستن مرورگر
driver.quit()
تو این کد، اول وبسایت مورد نظر رو باز میکنیم، تمام لینکها رو پیدا میکنیم و بعد هر لینک رو بررسی میکنیم که آیا سالمه یا خراب. اگه لینک خراب باشه، آدرس اون رو چاپ میکنیم.
در دنیای امروز، ابزارهای مختلفی برای تست خودکار وجود دارند. هر کدوم از این ابزارها ویژگیها و قابلیتهای خاص خودشون رو دارن که بسته به نیازهای پروژه و ترجیحات تیم تست میتونه انتخاب مناسبی باشه. اما چرا باید Selenium رو انتخاب کنیم؟ بیا با هم نگاهی به برخی از رقبای Selenium بندازیم و مقایسهای داشته باشیم.
Cypress یکی از ابزارهای جدید تست خودکار هست که بهسرعت محبوبیت زیادی پیدا کرده. این ابزار بهویژه برای تست برنامههای JavaScript و فریمورکهایی مثل React و Angular بسیار مناسبه. از مزایای Cypress میتونیم به اجرای سریعتر تستها و دیباگینگ سادهتر اشاره کنیم. اما یکی از نقاط ضعف بزرگ Cypress اینه که پشتیبانی محدودی از مرورگرها داره. در حال حاضر، فقط از Chrome و Edge پشتیبانی میکنه.
TestCafe هم یه ابزار متنباز دیگهست که برای تست خودکار برنامههای وب طراحی شده. این ابزار، برخلاف Selenium و Cypress، نیاز به WebDriver نداره و تستها رو بهطور مستقیم روی مرورگرها اجرا میکنه. TestCafe از مرورگرهای بیشتری نسبت به Cypress پشتیبانی میکنه، اما هنوز به اندازه Selenium انعطافپذیر نیست.
ویژگیها | Selenium | Cypress | TestCafe |
---|---|---|---|
زبانهای پشتیبانیشده | Java, Python, C#, Ruby, PHP, Node.js | JavaScript | JavaScript |
پشتیبانی از مرورگرها | Chrome, Firefox, Safari, Edge, IE | Chrome, Edge | Chrome, Firefox, Safari, Edge, IE |
متنباز | بله | بله | بله |
نیاز به WebDriver | بله | خیر | خیر |
سهولت دیباگینگ | متوسط | بالا | بالا |
سرعت اجرای تستها | متوسط | بالا | متوسط |
پشتیبانی از موبایل | محدود (با استفاده از Appium) | خیر | خیر |
پشتیبانی از پلتفرمهای مختلف | بله | بله (به جز موبایل) | بله (به جز موبایل) |
تو دنیای وب و برنامهنویسی، ابزارهای مختلفی وجود دارن که هر کدوم برای کار خاصی طراحی شدن. حالا میخوایم با هم فرق بین چهار تا از این ابزارها یعنی Selenium، Scrapy، BeautifulSoup و Puppeteer رو بررسی کنیم. هر کدوم از این ابزارها برای یه هدف خاص استفاده میشن و با شناخت بهترشون، میتونی انتخاب بهتری داشته باشی. پس بیاید نگاهی بندازیم به تفاوتهاشون و برای هر کدوم مثالی بزنیم.
Scrapy یه فریمورک مخصوص استخراج داده یا همون وباسکریپینگ (Web Scraping) هست. این ابزار بیشتر برای جمعآوری داده از وبسایتها استفاده میشه. Scrapy سورس HTML صفحات رو میخونه و دادههای مورد نظرت رو استخراج میکنه، اما کدهای جاوااسکریپت رو تفسیر نمیکنه و دادههای داینامیک رو لود نمیکنه.
مثلاً اگه بخوای اطلاعات محصولات یه فروشگاه آنلاین رو جمعآوری کنی، Scrapy این کار رو به بهترین شکل ممکن انجام میده. فرض کن میخوای نام و قیمت محصولات رو استخراج کنی:
import scrapy
class ProductSpider(scrapy.Spider):
name = 'product_spider'
start_urls = ['http://example.com/products']
def parse(self, response):
for product in response.css('div.product'):
yield {
'name': product.css('h2.name::text').get(),
'price': product.css('span.price::text').get(),
}
BeautifulSoup یه کتابخونه پایتون برای پارس کردن HTML و XML هست. این ابزار بهت کمک میکنه تا ساختار سند HTML رو بخونی و دادههای مورد نظرت رو استخراج کنی. BeautifulSoup خودش به تنهایی نمیتونه صفحات وب رو بگیره، بلکه معمولاً با کتابخونههایی مثل requests ترکیب میشه تا بتونه صفحات وب رو دانلود کنه و بعد دادهها رو پارس کنه.
مثلاً اگه بخوای عنوان صفحه 7Learn رو بخونی:
import requests
from bs4 import BeautifulSoup
url = 'https://www.7learn.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# استخراج عنوان صفحه
title = soup.title.string
print(title)
Puppeteer توسط تیم Google ساخته شده و فقط برای مرورگر Chrome و نسخه بدون رابط کاربری اون، یعنی Chromium، استفاده میشه. Puppeteer با استفاده از Node.js نوشته شده و برای کارهای مرتبط با Chrome بهینه شده. این ابزار برای وظایفی مثل تولید تصاویر و PDF از صفحات وب، تست UI و استخراج داده بسیار سریع و کارآمده.
Puppeteer مثل Selenium مرورگر رو اجرا میکنه و کدهای جاوااسکریپت رو هم اجرا میکنه. مثلاً برای بررسی عنوان صفحه 7Learn:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.7learn.com');
// استخراج عنوان صفحه
const title = await page.title();
console.log(title);
await browser.close();
})();
به طور خلاصه، هر یک از این ابزارها برای یه هدف خاص طراحی شدن:
در ادامه یک جدول مقایسهای بین Selenium، Scrapy، BeautifulSoup و Puppeteer رسم میکنیم که تفاوتها و کاربردهای هر کدوم رو به صورت خلاصه نشون بده:
ویژگیها | Selenium | Scrapy | BeautifulSoup | Puppeteer |
---|---|---|---|---|
کاربرد اصلی | تست خودکار و اتوماسیون مرورگر | استخراج داده و وباسکریپینگ | پارس کردن HTML و استخراج داده | اتوماسیون مرورگر Chrome |
اجرا کردن جاوااسکریپت | بله | خیر | خیر | بله |
پشتیبانی از AJAX | بله | بهطور غیر مستقیم (شبیهسازی درخواست) | خیر | بله |
زبانهای برنامهنویسی | Python, Java, C#, Ruby, PHP, Node.js | Python | Python | JavaScript (Node.js) |
پشتیبانی از مرورگرها | Chrome, Firefox, Safari, Edge, IE | - | - | Chrome, Chromium |
متنباز | بله | بله | بله | بله |
سازگاری با پلتفرمها | Windows, macOS, Linux | Windows, macOS, Linux | Windows, macOS, Linux | Windows, macOS, Linux |
سهولت استفاده | متوسط | بالا | بالا | بالا |
مناسب برای تست | بله | خیر | خیر | بله |
مناسب برای اسکریپینگ | بله، اما نه بهینه | بله، بهینه | بله، اما نیاز به ترکیب با requests | بله، برای دادههای داینامیک |
پس بسته به نیازی که داری، میتونی ابزار مناسب رو انتخاب کنی و کارتو راحتتر و سریعتر انجام بدی. امیدوارم این توضیحات بهت کمک کرده باشه تا تفاوتها و کاربردهای هر ابزار رو بهتر درک کنی!
Cypress بیشتر برای تست برنامههای JavaScript و فریمورکهایی مثل React و Angular مناسبه و امکانات زیادی داره. اما Selenium پشتیبانی گستردهتری از مرورگرها و زبانهای برنامهنویسی مختلف داره.
Python یکی از بهترین گزینهها برای شروع کار با Selenium هست. زبان ساده و قدرتمندی هست که به راحتی میتونی باهاش تستهای خودکار بنویسی.
بله، با استفاده از ابزارهایی مثل Appium که بر پایه Selenium ساخته شدهاند، میتونی تستهای خودکار برای برنامههای موبایل بنویسی.
با استفاده از Selenium Grid میتونی تستهای خودکار رو بهصورت موازی روی چندین مرورگر و سیستم مختلف اجرا کنی.
بله، Selenium کاملاً رایگان و متنباز هست و میتونی بدون هیچ هزینهای ازش استفاده کنی.
Selenium WebDriver یه ابزار اتوماسیون مرورگر کراسپلتفرم هست که معمولاً در تست خودکار نرمافزار استفاده میشه. WebDriver بیشتر توسط مهندسا استفاده میشه چون نیاز به نوشتن کد داره تا بتونه مرورگر رو اتوماسیون کنه.
Selenium IDE یه افزونه مرورگر هست که میتونه تستهای Selenium رو بدون نیاز به نوشتن کد تولید کنه. تو صنعت تست نرمافزار، این نوع ابزار به عنوان ابزار ضبط و پخش شناخته میشه.
Selenium از زبانهای برنامهنویسی مختلفی مثل Java، JavaScript، C#، Python، Ruby، PHP و غیره پشتیبانی میکنه.
ابزارهای تست مثل Selenium برای فرآیند توسعه نرمافزار ضروری هستن. این ابزارها به متخصصین تضمین کیفیت (QA) کمک میکنن تا تستهای مؤثر و جامع رو انجام بدن. Selenium یک ابزار قدرتمند و مستقل هست که امکان انجام انواع تستها روی برنامههای وب رو فراهم میکنه. استفاده از Selenium میتونه بهطور قابل توجهی کیفیت نرمافزار رو بهبود ببخشه و فرآیند استقرار رو سرعت ببخشه.
Selenium یک ابزار همهکاره هست که بهطور گسترده برای تست برنامههای وب استفاده میشه. با این حال، فقط یکی از ابزارهای زیادیه که میتونن در یک چارچوب تست (testing framework) مورد استفاده قرار بگیرن. این چارچوبها از مجموعهای از ابزارهای مختلف که به زبانهای برنامهنویسی خاصی اختصاص دارن، تشکیل شدن. برای مثال، JUnit و Cucumber معمولاً با Java استفاده میشن، در حالی که Chai، faker.js، dotenv و mochawesome بیشتر با JavaScript کاربرد دارن.
در حالی که Selenium برای سالها یک ابزار اصلی برای تست برنامههای وب بوده، چارچوبهای تست جدیدی هم پدید اومدن که اصلاً از Selenium استفاده نمیکنن. این ابزارها شامل Cypress، TestCafe و Playwright هستن که محبوبیت زیادی بین متخصصین QA به دست آوردن. بنابراین، مهمه که گزینههای موجود رو بررسی کنی و مناسبترین چارچوب تست رو برای نیازهای خاص پروژهت انتخاب کنی.
پس اگر میخوای وارد دنیای برنامهنویسی و توسعه وب بشی، یا حتی اگه فقط یه وبسایت کوچیک داری، پیشنهاد میکنم حتماً با Selenium آشنا بشی و از امکانات فوقالعادهش استفاده کنی. این ابزار میتونه بهت کمک کنه تا به سرعت و با کیفیت بیشتری پروژههات رو توسعه بدی و به نتیجه برسی. موفق باشی!
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: