Selenium (سلنیوم) چیست و چه کاربری در برنامه نویسی دارد؟
سلنیوم (Selenium) چیست؟
سلنیوم یک فریمورک متنباز (Open Source) و بسیار قدرتمند برای خودکارسازی (Automation) مرورگرهای وب است. به زبان ساده، سلنیوم به شما اجازه میدهد کدی بنویسید که مرورگر (مثل Chrome، Firefox یا Safari) را باز کند، به یک آدرس خاص برود، روی دکمهها کلیک کند، متن تایپ کند و اطلاعات را از صفحه بخواند؛ دقیقاً همان کارهایی که یک انسان انجام میدهد، اما با سرعت و دقت بسیار بالاتر.
نکته مهم اینجاست که سلنیوم یک زبان برنامهنویسی نیست، بلکه مجموعهای از ابزارهاست که با زبانهای محبوب مثل Python، Java، C#، JavaScript و Ruby سازگاری کامل دارد.
اجزای اصلی خانواده سلنیوم
سلنیوم شامل چهار بخش اصلی است که هر کدام هدف خاصی را دنبال میکنند:
-
Selenium WebDriver: محبوبترین بخش که به برنامهنویس اجازه میدهد دستورات را مستقیماً به مرورگر ارسال کند.
-
Selenium IDE: یک افزونه مرورگر برای ضبط (Record) و بازپخش (Playback) تعاملات کاربر. برای کسانی که کدنویسی بلد نیستند یا میخواهند سریعاً یک تست ساده بسازند عالی است.
-
Selenium Grid: برای اجرای تستها به صورت همزمان (Parallel) روی سیستمعاملها و مرورگرهای مختلف.
-
Selenium RC: نسخه قدیمی که اکنون جای خود را به WebDriver داده است.
چرا برنامهنویسان عاشق سلنیوم هستند؟ (کاربردها)
سلنیوم فقط برای «تسترها» نیست؛ برنامهنویسان در حوزههای مختلف از آن بهره میبرند:
۱. تست خودکار نرمافزار (Automated Testing)
- اصلیترین کاربرد سلنیوم، تست رگرسیون (Regression Testing) است. فرض کنید تغییری در کد وبسایت ایجاد کردهاید؛ آیا مطمئن هستید که بخش «خرید» هنوز کار میکند؟ به جای چک کردن دستی، یک اسکریپت سلنیوم در چند ثانیه تمام مراحل خرید را تست کرده و در صورت بروز خطا، به شما گزارش میدهد.
۲. استخراج داده یا اسکرپینگ (Web Scraping)
- بسیاری از سایتهای مدرن با استفاده از JavaScript لود میشوند و ابزارهای ساده اسکرپینگ نمیتوانند محتوای آنها را بخوانند. سلنیوم چون یک مرورگر واقعی را اجرا میکند، میتواند با سایتهای پیچیده تعامل کرده و دادههایی مثل قیمتها، کامنتها یا اطلاعات بورس را استخراج کند.
۳. خودکارسازی کارهای تکراری (Administrative Tasks)
- پر کردن فرمهای اداری، دانلود انبوه فاکتورها از پنلهای مدیریتی، یا حتی ارسال پیامهای خودکار در شبکههای اجتماعی تحت وب، همگی با سلنیوم ممکن است.
۴. مانیتورینگ وبسایت
- شما میتوانید اسکریپتی بنویسید که هر ۱۰ دقیقه یکبار وارد سایت شود و بررسی کند که آیا تمام المانهای حیاتی (مثل دکمه پرداخت) به درستی نمایش داده میشوند یا خیر.
مزایای کلیدی سلنیوم
-
رایگان و متنباز: هیچ هزینهای برای لایسنس پرداخت نمیکنید.
-
حمایت از چندین زبان: دست شما در انتخاب زبان برنامهنویسی باز است.
-
جامعه کاربری بزرگ: اگر به مشکلی بخورید، احتمالاً هزاران نفر قبلاً در Stack Overflow به آن پاسخ دادهاند.
-
سازگاری با پلتفرمها: روی ویندوز، مک و لینوکس به خوبی کار میکند.
رقبای سلنیوم؛ آیا دوران سلنیوم تمام شده است؟
با وجود قدرت زیاد، سلنیوم بدون نقص نیست (مثلاً سرعت نسبتاً پایین و پیچیدگی در مدیریت Waitها). همین موضوع باعث ظهور رقبای مدرنی شده است که برنامهنویسان را به چالش میکشند:
۱. Playwright (محصول مایکروسافت)
بزرگترین رقیب فعلی سلنیوم. Playwright بسیار سریعتر است، به صورت پیشفرض از اجرای موازی پشتیبانی میکند و مشکلاتی مثل «منتظر ماندن برای لود شدن المان» را به صورت خودکار حل کرده است.
۲. Cypress
محبوب دل توسعهدهندگان Front-end. برخلاف سلنیوم که خارج از مرورگر اجرا میشود، Cypress مستقیماً داخل مرورگر اجرا میشود. این یعنی سرعت فوقالعاده و دیباگ کردن بسیار راحتتر، هرچند فقط از زبان جاوااسکریپت پشتیبانی میکند.
۳. Puppeteer (محصول گوگل)
ابزاری اختصاصی برای کنترل مرورگر Chrome (یا Chromium). برای اسکرپینگ و تولید PDF از صفحات وب بینظیر است، اما مانند Cypress محدود به اکوسیستم جاوااسکریپت است.
مقایسه در یک نگاه
| ویژگی | Selenium | Playwright | Cypress |
| زبانهای پشتیبانی شده | متنوع (Java, Python, ...) | متنوع (JS, Python, .NET, Java) | فقط JavaScript/TypeScript |
| سرعت اجرا | متوسط | بسیار بالا | بالا |
| پیچیدگی نصب | نیاز به Driverهای جداگانه | نصب آسان با یک دستور | نصب بسیار آسان |
| پایداری تست | نیاز به مدیریت دستی Wait | پایداری بالا (Auto-wait) | پایداری بسیار بالا |
سلنیوم در دات نت چگونه کار میکند؟
استفاده از سلنیوم در اکوسیستم .NET (بهویژه ASP.NET Core) بسیار لذتبخش است، چون مایکروسافت و تیم سلنیوم هماهنگی خوبی با هم دارند. برای اینکه بدانید آن فایلهای دانلودی سایت سلنیوم چیست و چطور باید در پروژه از آنها استفاده کنید، این راهنمای گامبهگام را دنبال کنید.
آن فایلهای دانلودی در سایت سلنیوم چیست؟
وقتی به سایت Selenium.dev میروید، با چندین گزینه مواجه میشوید که ممکن است گیجکننده باشند:
-
Selenium Server (Grid): این یک فایل .jar است. اگر میخواهید تستها را روی چندین سیستم مختلف یا در مقیاس بزرگ اجرا کنید به آن نیاز دارید. برای شروع کار معمولی، اصلاً به این نیاز ندارید.
-
Language Bindings: اینها کتابخانههای مخصوص هر زبان (مثل C#، Java و غیره) هستند. خبر خوب برای شما: در داتنت، به جای دانلود دستی اینها، از NuGet استفاده میکنیم.
-
Browser Drivers: این مهمترین بخش است! سلنیوم برای حرف زدن با کروم یا فایرفاکس، نیاز به یک واسطه به نام Driver دارد (مثلاً chromedriver.exe). این همان چیزی است که باید با نسخه مرورگر شما همخوانی داشته باشد.
ساختار کارکرد سلنیوم (معماری)
قبل از کدنویسی، بدانید چه اتفاقی میافتد: کد شما به کتابخانه سلنیوم دستور میدهد -> کتابخانه به Driver پیام میفرستد -> درایور، مرورگر (مثل Chrome) را باز کرده و دستور را اجرا میکند.
مراحل راهاندازی در ASP.NET Core (یا Console App)
فرض بگیرید میخواهید یک پروژه تست بنویسید یا یک ابزار برای اسکرپینگ در داتنت بسازید:
گام اول: نصب پکیجهای NuGet
در Visual Studio، روی پروژه راستکلیک کرده و Manage NuGet Packages را بزنید. این دو پکیج را نصب کنید:
-
Selenium.WebDriver: هسته اصلی سلنیوم برای داتنت.
-
Selenium.WebDriver.ChromeDriver: (اختیاری اما پیشنهادی) این پکیج باعث میشود فایل chromedriver.exe به صورت خودکار در پوشه خروجی پروژه شما قرار بگیرد و دیگر نیازی نیست آن را دستی از سایت سلنیوم دانلود کنید.
گام دوم: نوشتن اولین کد (C#)
در اینجا یک قطعه کد ساده برای باز کردن مرورگر و جستجو در گوگل آورده شده است:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
// 1. ایجاد یک نمونه از مرورگر کروم
using (IWebDriver driver = new ChromeDriver())
{
// 2. رفتن به سایت مورد نظر
driver.Navigate().GoToUrl("https://www.google.com");
// 3. پیدا کردن فیلد جستجو (با استفاده از نام آن در HTML)
IWebElement searchBox = driver.FindElement(By.Name("q"));
// 4. تایپ کردن یک عبارت و زدن اینتر
searchBox.SendKeys("Selenium in ASP.NET Core");
searchBox.Submit();
// یک وقفه کوتاه برای مشاهده نتیجه
System.Threading.Thread.Sleep(5000);
}
استفاده از سلنیوم در دل یک پروژه ASP.NET Core
اگر قصد دارید داخل یک Web API یا MVC از سلنیوم استفاده کنید (مثلاً برای خواندن اطلاعات از یک سایت دیگر وقتی کاربر درخواستی میفرستد)، چند نکته حیاتی وجود دارد:
-
Inject کردن WebDriver: بهتر است IWebDriver را به صورت Transient یا Scoped در فایل Program.cs تعریف نکنید، چون مدیریت چرخه عمر مرورگر سخت میشود. معمولاً یک سرویس جداگانه برای این کار میسازند.
-
حالت Headless (بدون رابط گرافیکی): در سرورهای لینوکسی یا ویندوزی که مانیتور ندارند، نمیتوانید مرورگر را به صورت گرافیکی باز کنید. باید آن را در حالت Headless اجرا کنید:
var options = new ChromeOptions();
options.AddArgument("--headless"); // مرورگر باز میشود اما دیده نمیشود
options.AddArgument("--disable-gpu");
using (IWebDriver driver = new ChromeDriver(options))
{
// کدهای شما...
}
چند نکته حرفهای برای داتنتکارها
-
Selenium Extras (Wait Helpers): همیشه از WebDriverWait استفاده کنید. سایتهای امروزی سنگین هستند و اگر بلافاصله بعد از باز شدن صفحه دنبال دکمه بگردید، کدتان خطا میدهد. باید به سلنیوم بگویید: «صبر کن تا دکمه قابل کلیک شود».
-
پرهیز از Thread.Sleep: هرگز از خواب مصنوعی استفاده نکنید! به جای آن از ExpectedConditions استفاده کنید.
-
تست واحد (Unit Testing): سلنیوم را معمولاً با فریمورکهای تست مثل xUnit یا NUnit ترکیب میکنند تا گزارشهای تمیز از خرابیهای احتمالی سایت بگیرند.
خلاصه مسیر:
- پروژه داتنت بساز.
- پکیجهای Selenium.WebDriver و Selenium.WebDriver.ChromeDriver را از NuGet بگیر.
- با کلاس ChromeDriver یک شیء بساز و با متد Maps() شروع به کار کن.
آیا سلنیوم قسمتی از کُد برنامه شماست؟
سلنیوم قرار نیست بخشی از کدِ اصلی سایت فروشگاهی شما باشد، بلکه قرار است «نگهبان» آن باشد. اگر سایت شما بزرگ شود، هر بار که تغییری در کدها میدهی (مثلاً بخش تخفیفها را دستکاری میکنی)، این ترس وجود دارد که نکند ناخواسته بخش «سبد خرید» را خراب کرده باشید. اینجاست که سلنیوم وارد میشود.
پس سلنیوم کجای پروژه ما قرار خواهد گرفت؟
اشتباه رایج این است که توسعهدهندگان سعی میکنند سلنیوم را داخل خودِ پروژه Web (کنترلرها یا ویوها) بنویسند. جای درست سلنیوم در یک پروژه تست (Test Project) مجزا در کنار پروژه اصلی شماست.
در ساختار Solution شما:
-
MyStore.Web (پروژه اصلی سایت شما)
-
MyStore.Tests.UI (یک پروژه از نوع xUnit یا NUnit که سلنیوم در آن نصب شده است)
سناریوی عملی: تست «افزودن به سبد خرید»
فرض کن میخواهی مطمئن شوی که کاربر همیشه میتواند محصول را به سبد خرید اضافه کند و قیمت نهایی درست محاسبه میشود. به جای اینکه خودت هر بار سایت را باز کنی و کلیک کنی، این تست را برای سلنیوم مینویسی:
کد نمونه (با استفاده از xUnit و Selenium):
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using Xunit;
public class CheckoutTests : IDisposable
{
private readonly IWebDriver _driver;
public CheckoutTests()
{
// تنظیمات درایور (میتواند Headless باشد تا پنجره باز نشود)
_driver = new ChromeDriver();
}
[Fact]
public void AddToCart_ShouldUpdateTotal()
{
// 1. رفتن به صفحه محصول
_driver.Navigate().GoToUrl("https://localhost:5001/products/iphone-15");
// 2. پیدا کردن دکمه افزودن به سبد خرید و کلیک
var addToCartBtn = _driver.FindElement(By.Id("add-to-cart-button"));
addToCartBtn.Click();
// 3. رفتن به صفحه سبد خرید
_driver.Navigate().GoToUrl("https://localhost:5001/cart");
// 4. چک کردن اینکه آیا قیمت درست نمایش داده میشود؟
var totalPriceElement = _driver.FindElement(By.ClassName("total-price"));
string totalPrice = totalPriceElement.Text;
Assert.Equal("$999", totalPrice); // اگر قیمت متفاوت باشد، تست شکست میخورد و تو باخبر میشوی
}
public void Dispose()
{
_driver.Quit(); // بستن مرورگر پس از پایان تست
}
}
کاربردهای دیگر برای سایت فروشگاهی تو
علاوه بر تستهای حیاتی (مثل پرداخت و لاگین)، سلنیوم در این موارد هم برایت معجزه میکند:
-
چک کردن لینکهای شکسته (Broken Links): اسکریپتی بنویس که تمام صفحات محصولات را باز کند و ببیند آیا خطای ۴۰۴ وجود دارد یا خیر.
-
تست ریسپانسیو بودن: سلنیوم میتواند ابعاد مرورگر را تغییر دهد (مثلاً روی حالت موبایل) و چک کند که آیا دکمه «خرید» هنوز قابل مشاهده و کلیک هست یا زیر المان دیگری رفته است.
-
مانیتورینگ قیمت رقبا: میتوانی یک اسکریپت بنویسی که شبها به سایت رقبایت سر بزند، قیمت محصول مشابه را بردارد و در دیتابیس تو ذخیره کند تا بتوانی استراتژی قیمتگذاری داشته باشی.
یک مفهوم حرفهای: Page Object Model (POM)
اگر سایتت ۵۰ صفحه داشته باشد و تو در همه تستها از By.Id("btn-buy") استفاده کرده باشی، اگر یک روز ID آن دکمه را عوض کنی، تمام تستهایت میسوزد! برنامهنویسان حرفهای .NET از الگوی POM استفاده میکنند. یعنی برای هر صفحه سایت (مثلاً صفحه لاگین) یک کلاس C# میسازند که المانهای آن صفحه را مدیریت میکند. اینطوری اگر تغییری در HTML سایت بدهی، فقط یک کلاس را اصلاح میکنی، نه ۱۰۰ تا تست را.
نتیجهگیری: آیا برای تو مفید است؟
اگر سایت تو یک پروژه تمرینی کوچک است، شاید سلنیوم وقتگیر باشد. اما اگر مشتری واقعی داری یا قصد داری این پروژه را در رزومه خود قرار دهی، داشتن یک پارت تست با سلنیوم نشاندهنده این است که تو یک توسعهدهنده سطح بالا (Senior Mindset) هستی که به پایداری سیستم اهمیت میدهد.
نتیجهگیری: آیا هنوز باید سلنیوم یاد بگیریم؟
پاسخ کوتاه: بله! اگرچه ابزارهایی مثل Playwright در حال فتح بازار هستند، اما سلنیوم به دلیل سابقه طولانی، در اکثر پروژههای بزرگ سازمانی استفاده میشود. یادگیری سلنیوم به شما دید عمیقی درباره نحوه کارکرد مرورگرها و پروتکلهای وب میدهد.
نکته هوشمندانه: اگر پروژهای دارید که نیاز به پشتیبانی از مرورگرهای قدیمی (مثل IE) یا زبانهای خاصی غیر از جاوااسکریپت دارد، سلنیوم همچنان پادشاه است. اما برای پروژههای مدرن و سریع، نگاهی جدی به Playwright داشته باشید.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.