فکر کن تو یه برنامه نویس هستی و داری روی یه پروژه بزرگ کار میکنی. هر بار که یه تغییری تو کدت میدی، باید ساعتها بشینی و دستی همه بخشهای سایت یا نرم افزار رو چک کنی که ببینی درست کار میکنن یا نه. واقعاً عذاب آوره که هی باید برگردی و همه چیزو چک کنی. حالا اگه این ابزارهای اتوماسیون تست نبودن، چی میشد؟ شاید هیچ پیشرفتی نمیکردیم و بیشتر وقتمون میرفت تو دیباگ کردن مشکلات ساده و ابتدایی.
اما تو دهه ۲۰۰۰، یه قهرمان به نام 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 آشنا بشی و از امکانات فوق العاده ش استفاده کنی. این ابزار میتونه بهت کمک کنه تا به سرعت و با کیفیت بیشتری پروژه هات رو توسعه بدی و به نتیجه برسی. موفق باشی!
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: