آموزش سلنیوم - اتوماسیون مرورگر را با Selenium WebDriver بیاموزید

سلنیوم مجموعه ای از کتابخانه ها است که برای تقلید از تعاملات کاربر با مرورگر استفاده می شود.

کاربران اسکریپت ها را با استفاده از کتابخانه های سلنیوم برای شبیه سازی تعاملات رایج مرورگر کاربر ، مانند حرکت به یک صفحه ، کلیک روی یک دکمه و پر کردن فرم ، می نویسند.

سلنیوم معمولاً در پروژه هایی که برنامه های جلویی وب (UI) ایجاد می کنند ، استفاده می شود. این برای خودکار کردن سناریوهایی استفاده می شود که تعامل کاربر با برنامه وب را تقلید می کنند.




سلنیوم را نصب کنید

برای استفاده از Selenium WebDriver در یک پروژه ، ابتدا باید Selenium Core و WebDriver Binaries را نصب کنیم.

همچنین باید مسیر مربوط به هر درایور قابل اجرا را تعیین کنیم.


اگر می خواهید از سلنیوم با جاوا استفاده کنید ، ساده ترین راه برای نصب سلنیوم استفاده از وابستگی Maven در پروژه شماست pom.xml فایل:


org.seleniumhq.selenium
selenium-java
3.141.59

برای اجرای آزمایش های سلنیوم در مرورگر Google Chrome یا Firefox ، باید وابستگی مربوطه را در pom.xml خود اضافه کنید. فایل:

مرورگر Google Chrome


org.seleniumhq.selenium
selenium-chrome-driver
3.141.59

مرورگر Firefox


org.seleniumhq.selenium
selenium-firefox-driver
3.141.59

WebDriver Binaries را نصب کرده و مسیر را تنظیم کنید

برای اجرای آزمایش های سلنیوم در یک مرورگر خاص ، باید باینری WebDriver مخصوص مرورگر مربوطه را نصب کرده و مسیر صحیح را تنظیم کنید.

کروم برای تنظیم مسیر قابل اجرا به کروم در سیستم MacOS ، می توانید از موارد زیر استفاده کنید:


$ export PATH='$PATH:/path/to/chromedriver'

همچنین می توانید مسیر را به صورت برنامه نویسی و مستقیم در کد تنظیم کنید:

System.setProperty('webdriver.chrome.driver', '/path/to/chromedriver');

Firefox - Geckodriver:

System.setProperty('webdriver.gecko.driver', '/path/to/geckodriver');

حاشیه، غیرمتمرکز:

System.setProperty('webdriver.edge.driver', 'C:/path/to/MicrosoftWebDriver.exe');

اینترنت اکسپلورر:


System.setProperty('webdriver.ie.driver', 'C:/path/to/IEDriver.exe');

درایور مرورگر فوری

بعد از نصب سلنیوم ، در مرحله بعدی ایجاد یک درایور مرورگر خاص برای اجرای آزمایشات رابط کاربر است.

تست های سلنیوم در برابر رابط کاربری یک برنامه کاربردی هستند و برای کار با آنها نیاز به یک مرورگر است. می توانیم مشخص کنیم که می خواهیم آزمایشات خود را در برابر کدام مرورگر اجرا کنیم و سپس درایور مناسب را نمونه سازی کنیم.

توجه داشته باشید:آزمایش سلنیوم فقط برای استفاده می شود اتوماسیون رابط کاربر و آزمایشات در برابر یک مرورگر اجرا می شود.

کروم

import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; WebDriver driver = new ChromeDriver();

فایرفاکس

import org.openqa.selenium.WebDriver; import org.openqa.selenium.Firefox.FirefoxDriver; WebDriver driver = new FirefoxDriver();

حاشیه، غیرمتمرکز

import org.openqa.selenium.WebDriver; import org.openqa.selenium.edge.EdgeDriver; WebDriver driver = new EdgeDriver();

اینترنت اکسپلورر

import org.openqa.selenium.WebDriver; import org.openqa.selenium.ie.InternetExplorerDriver; WebDriver driver = new InternetExplorerDriver();

مرورگر مرورگر

هنگامی که یک جلسه فعال WebDriver داشتیم و یک مرورگر را راه اندازی کردیم ، کار بعدی که می خواهیم انجام دهیم این است که به یک صفحه برویم و تست ها را اجرا کنیم.

Selenium WebDriver روشهای مفیدی را برای تعامل با مرورگر فراهم می کند. ما می توانیم ناوبری را انجام دهیم و اطلاعات مربوط به صفحه فعلی را بدست آوریم.


برای رفتن به یک URL دو گزینه داریم:

//The short form driver.get('https://devqa.io'); //The long form driver.navigate().to('https://devqa.io');

برگشتن

سلنیوم back() روش شبیه سازی کلیک کردن روی دکمه بازگشت مرورگر:

driver.navigate().back();

پیش رفتن

سلنیوم forward() روش شبیه سازی کلیک کردن روی دکمه جلو مرورگر:

driver.navigate().forward();

تازه کردن صفحه

سلنیوم refresh() روش با کلیک کردن روی دکمه تازه سازی مرورگر شبیه سازی می شود:


driver.navigate().refresh();

دریافت اطلاعات صفحه فعلی

سلنیوم همچنین روش هایی را برای به دست آوردن آدرس اینترنتی ، عنوان صفحه و منبع صفحه ارائه می دهد.

دریافت URL فعلی

ما می توانیم URL صفحه فعلی را دریافت کنیم:

driver.getCurrentUrl();

عنوان صفحه را دریافت کنید

می توانیم عنوان صفحه فعلی را بدست آوریم:

driver.getTitle();

منبع صفحه را دریافت کنید

ما می توانیم منبع صفحه فعلی را بدست آوریم:

driver.getPageSource();

بستن و ترک جلسه مرورگر

برای بستن پنجره مرورگر فعلی:

driver.close(); توجه داشته باشید:بستن پنجره مرورگر نمی کند جلسه WebDriver را خاتمه دهید.

برای پایان دادن به جلسه WebDriver در پایان آزمایش:

driver.quit();

روش ترک:

  • تمام پنجره های مرتبط با آن جلسه WebDriver را ببندید
  • فرایند مرورگر را بکشید
  • فرایند راننده را بکشید


مکان یاب های سلنیوم - نحوه یافتن عناصر وب

قبل از اینکه بتوانیم با یک عنصر وب تعامل داشته باشیم ، باید عنصر را در صفحه html قرار دهیم.

یکی از مهمترین مهارتهای مهندس اتوماسیون آزمایش که با Selenium WebDriver کار می کند این است که می تواند از روشهای مناسب برای تعیین عناصر در یک صفحه استفاده کند.

به عنوان مثال ، اگر می خواهیم روی پیوند کلیک کنیم ، تأیید کنیم که پیامی نمایش داده شده است یا برای کلیک روی دکمه ، ابتدا باید عنصر را پیدا کنیم.

Selenium WebDriver روش های مختلفی را برای تعیین عناصر در یک صفحه ارائه می دهد.

یک مکان یاب آنچه شما می خواهید در یک صفحه پیدا کنید را توصیف می کند. در جاوا ، با استفاده از By مکان یابی ایجاد می کنیم کلاس

به عنوان مثال ، اگر می خواستیم h1 را پیدا کنیم عنصر عنوان در یک صفحه ، ما می نویسیم

WebElement h1Element = driver.findElement(By.tagName('h1'));

یا اگر می خواستیم تمام عناصر پاراگراف را در یک صفحه پیدا کنیم ، استفاده می کنیم

List pElements = driver.findElements(By.tagName('p'));

توسط متن پیوند

این روش با توجه به متنی که نمایش می دهد ، عناصر را پیدا می کند. این روش معمولاً مکان یاب ترجیحی برای پیوندهای موجود در یک صفحه است.

به عنوان مثال ، فرض کنید ما این پیوند را در یک صفحه داریم:

Forgotten Password

سپس ، پیوند را می توان با استفاده از:

driver.findElement(By.linkText('Forgotten Password'));

توسط متن پیوند جزئی

وقتی از متن دقیق پیوند مطمئن نیستیم اما می خواهیم پیوند یا پیوندهایی را پیدا کنیم حاوی یک متن داده شده ، ما می توانیم استفاده کنیم

driver.findElement(By.partialLinkText('Forgotten '));

یا

driver.findElement(By.partialLinkText('Password'));

هنگام استفاده از findElement باید مراقب باشید با استفاده از این مکان یاب زیرا عناصر دیگری می توانند حاوی همان متن جزئی باشند ، بنابراین نباید از این مورد برای تعیین یک عنصر به تنهایی استفاده شود. بهتر است از آن برای تعیین گروهی از عناصر با استفاده از روش findElements استفاده کنید.

با ویژگی کلاس

این عناصر را بر اساس مقدار صفت کلاس قرار می دهد. این مورد فقط برای عناصر دارای ویژگی کلاس قابل استفاده است ، اما استفاده از آن با findElement انتخاب خوبی نیست. روش.

با استفاده از همان مثال بالا با پیوند ، پیوند 'رمز فراموش شده' دارای یک کلاس CSS است: btn | که می تواند برای مکان یابی آن استفاده شود

Forgotten Password

سپس ، پیوند را می توان با استفاده از:

driver.findElement(By.className('btn')); توجه داشته باشید:از ویژگی کلاس برای صفحات یک ظاهر طراحی شده استفاده می شود ، بنابراین احتمال اینکه بسیاری از عناصر دارای کلاس یکسانی باشند وجود دارد.

توسط شناسه

توسط id ، عناصر را با توجه به مقدار ویژگی id آنها پیدا می کند. پیوند در مثال بالا دارای شناسه ای است که می توانیم از آن استفاده کنیم:

Forgotten Password

سپس ، پیوند را می توان با استفاده از:

driver.findElement(By.id('change-password'));

اگر صفت id در دسترس باشد ، باید از آن به عنوان اولین انتخاب ترجیحی استفاده شود.

بر اساس اسم

عناصر را با توجه به ویژگی صفت نام آنها تعیین می کند. معمولاً فقط می توان از آن برای تعیین عناصر فرم ساخته شده با استفاده از: ، ، ، و .

در یک صفحه ورود به سیستم معمولی ، شما فیلدهای ورودی دارید که می تواند مانند موارد زیر باشد:

سپس می توانیم فیلد ایمیل را با ویژگی نام ورودی تعیین کنیم

driver.findElement(By.name('email'));

با نام برچسب

این یاب عناصر را با نام برچسب HTML خود پیدا می کند. از آنجا که اغلب موارد تکراری بسیاری از برچسب ها وجود دارد ، استفاده از این روش برای یافتن یک عنصر واحد ایده خوبی نیست.

استفاده معمول از مکان یابی یک عنصر با نام برچسب برای تعیین سرصفحه صفحه است ، زیرا فقط یکی از این موارد وجود دارد:

Welcome to DevQA!

سپس می توانیم قسمت عنوان را بر اساس نام برچسب قرار دهیم:

driver.findElement(By.tagName('h1'));

توسط منتخب Css

عناصر را از طریق موتور انتخابی W3 CSS درایور پیدا می کند. مکان یاب انتخابگر CSS بسیار قدرتمند است زیرا می توان از آن برای قرار دادن هر عنصر در صفحه استفاده کرد.

Forgotten Password

سپس می توانیم فیلد ایمیل را با ویژگی نام ورودی تعیین کنیم

driver.findElement(By.cssSelector('#change-password'));

اینجا ، # شناسه عنصر را نشان می دهد. و . notation ویژگی کلاس یک عنصر را نشان می دهد.

مثلا:

driver.findElement(By.cssSelector('.btn'));

مربوط:

توسط XPath

مکان یاب XPath پیچیده ترین انتخاب برای استفاده است. این به دانش زبان پرسش XPath نیاز دارد ، بنابراین اگر به آن زبان پرسش مسلط نیستید ، یافتن عناصر با استفاده از پرس و جوهای XPath برای شما دشوار است.

بیایید به یک مثال استفاده از XPath برای این HTML نگاهی بیندازیم:

Change Password

سپس می توانیم فیلد ایمیل را با ویژگی نام ورودی تعیین کنیم

driver.findElement(By.xpath('//a[@id='change-password']'));

تعامل با عناصر وب

وقتی عنصری را در صفحه قرار دادیم ، می توانیم با استفاده از انواع روشهایی که سلنیوم ارائه می دهد با آن تعامل داشته باشیم.

Selenium WebDriver روشهای مختلفی را برای تعامل با عناصر وب مانند کلیک کردن روی دکمه های ارسال و وارد کردن متن در قسمت های ورودی فراهم می کند.

| | + _ | کلاس تعدادی روش دارد که می توانیم از آنها برای تعامل با عناصر صفحه استفاده کنیم. رایج ترین آنها عبارتند از:

  • WebElement
  • click()
  • clear()
  • sendKeys()

کلیک

| | + _ | روش برای کلیک کردن روی عنصر وب مانند پیوند یا دکمه استفاده می شود.

مثال:

submit()click()

پاک کردن

| | + _ | روش مقدار فیلد ورودی را پاک می کند.

نکته:توصیه می شود از . پاک () روش قبل از وارد کردن متن در یک قسمت ورودی.

مثال:

Menu WebElement mToggle = driver.findElement(By.id('menu-toggle')); mToggle.click();

SendKeys

ما از clear() استفاده می کنیم روش برای وارد کردن نویسه ها در یک جعبه فیلد ورودی.

مثال:

WebElement username = driver.findElement(By.id('username')); username.clear();

مثال - پر کردن فرم

در زیر مثالی از نحوه استفاده از سلنیوم برای پر کردن فرم آورده شده است

sendKeys()

اکنون که اصول Selenium WebDriver را بیان کردیم ، زمان ساخت یک چارچوب فرا رسیده است.



یک چارچوب سلنیوم بسازید

بیاموزید که چگونه یک چارچوب سلنیوم را از ابتدا بسازید.

قسمت اول آموزش گام به گام نحوه ایجاد یک چارچوب سلنیوم WebDriver با استفاده از جاوا ، Maven و TestNG را ارائه می دهد.

بخش دوم بر ساختار آزمایش سلنیوم بر اساس مدل معروف Page Object تمرکز دارد.