portaldacalheta.pt
  • Основен
  • Управление На Проекти
  • Дизайн На Марката
  • Процес На Проектиране
  • Начин На Живот
Технология

Автоматизация в селен: Страничен обектен модел и фабрична страница



Писането на автоматизирани тестове е повече от просто лукс за всеки пъргав екип за разработка на софтуер. Това е необходимост и е основен инструмент за бързо намиране на грешки по време на ранните фази на циклите на разработване на софтуер. Когато има нова функция, която все още е във фаза на разработка, разработчиците могат да изпълняват автоматизирани тестове и да видят как другите части на системата са засегнати от тези промени. Тази статия ще обясни как можете да ускорите автоматизираното тестване с помощта на Page Object модел в Селен .

През автоматизация на тестове , възможно е да се намалят разходите за отстраняване на грешки и да се донесе цялостно подобрение на осигуряване на качеството на софтуера (QA) процес. С подходящи тестове разработчиците получават шанс за намиране и отстраняване на грешки дори преди да стигне до QA. Автоматизацията на тестовете допълнително ни помага да автоматизираме тестови случаи и функции, които постоянно се регресират. По този начин QA имат повече време при тестване на други части на приложението. Нещо повече, това помага за гарантиране на качеството на продукта в производствените версии. В резултат на това получаваме продукти, които са ефективно по-стабилни и QA процес, който е по-ефективен.



Автоматизацията на селен опростява тестовата автоматизация за уеб приложения



Селенът опростява автоматизацията на тестове за уеб приложения Tweet

Въпреки че писането на автоматизирани тестове може да изглежда като лесна задача за разработчици и инженери, все още има възможност да се окажете с лошо внедрени тестове и високата цена на поддръжката на кода във всеки гъвкав процес. Опитът за постоянно предоставяне на промени или функции във всеки гъвкав проект за разработка може да се окаже скъпо, когато участват тестове. Промяната на един елемент на уеб страница, на която разчитат 20 теста, ще изисква един да премине през тези 20 тестови процедури и да актуализира всеки от тях, за да се адаптира към тази нововъведена промяна. Това не само може да отнеме много време, но и сериозен демотивиращ фактор, когато става въпрос за внедряване на автоматизирани тестове в началото.



Но какво ще стане, ако можем да направим промяната само на едно място и всички съответни рутинни тестове да я използват? В тази статия ще разгледаме автоматизираните тестове в Selenium и как можем да използваме Page Object модели, за да напишем поддържаеми и повторно използвани рутинни тестове.

Модел на обект на страница в селен

Модел на обект на страница е шаблон за обектен дизайн в Selenium, където уеб страниците са представени като класове, а различните елементи на страницата са дефинирани като променливи в класа. След това всички възможни потребителски взаимодействия могат да бъдат внедрени като методи в класа:



clickLoginButton(); setCredentials(user_name,user_password);

Тъй като добре именуваните методи в класовете са лесни за четене, това работи като елегантен начин за внедряване на тестови рутини, които са едновременно четими и по-лесни за поддържане или актуализиране в бъдеще. Например:

За да поддържаме Page Object модел, ние използваме Page Factory . Page Factory в Selenium е разширение на Page Object и може да се използва по различни начини. В този случай ще използваме Page Factory, за да инициализираме уеб елементи, които са дефинирани в класове на уеб страници или Page Objects.



Класовете на уеб страници или обектите на страница, съдържащи уеб елементи, трябва да бъдат инициализирани с помощта на Page Factory, преди да могат да се използват променливите на уеб елементите. Това може да стане просто чрез използването на initElements функция на PageFactory:

LoginPage page = new LoginPage(driver); PageFactory.initElements(driver, page);

Или още по-просто:



LoginPage page = PageFactory.intElements(driver,LoginPage.class)

Или вътре в конструктора на клас на уеб страница:

public LoginPage(WebDriver driver) { this.driver = driver; PageFactory.initElements(driver, this); }

Page Factory ще инициализира всеки WebElement променлива с препратка към съответния елемент на действителната уеб страница въз основа на конфигурирани „локатори“. Това става чрез използването на @FindBy анотации. С тази анотация можем да определим стратегия за търсене на елемента, заедно с необходимата информация за идентифицирането му:



@FindBy(how=How.NAME, using='username') private WebElement user_name;

Всеки път, когато се извика метод за това WebElement променлива, драйверът първо ще я намери на текущата страница и след това ще симулира взаимодействието. В случай, че работим с проста страница, знаем, че ще намерим елемента на страницата всеки път, когато я потърсим, а също така знаем, че в крайна сметка ще се оттеглим от тази страница и няма да се върнем към нея, можем да кешираме търсеното поле с помощта на друга проста анотация:

@FindBy(how=How.NAME, using='username') @CacheLookup private WebElement user_name;

Цялата тази дефиниция на променливата WebElement може да бъде заменена с нейната много по-кратка форма:



@FindBy(name='username') private WebElement user_name;

The @FindBy анотацията поддържа няколко други стратегии, които улесняват нещата:

гръцката дългова криза, обяснена с прости думи
id, name, className, css, tagName, linkText, partialLinkText, xpath @FindBy(id='username') private WebElement user_name; @FindBy(name='passsword') private WebElement user_password; @FindBy(className='h3') private WebElement label; @FindBy(css=”#content”) private WebElement text;

След като бъдат инициализирани, тези променливи WebElement след това могат да се използват за взаимодействие със съответните елементи на страницата. Следният код ще например например:

user_password.sendKeys(password);

... изпратете дадената последователност от натискания на клавиши в полето за парола на страницата и тя е еквивалентна на:

driver.findElement(By.name(“user_password”)).sendKeys(password);

Продължавайки, често ще попадате на ситуации, при които трябва да намерите списък с елементи на дадена страница и точно тогава @FindBys е полезно:

@FindBys(@FindBy(css=”div[class=’yt-lockup-tile yt-lockup-video’]”))) private List videoElements;

Горният код ще намери всички div елементи с две имена на класове “yt-lockup-tile” и “yt-lockup-video”. Можем да опростим това още повече, като го заменим със следното:

@FindBy(how=How.CSS,using='div[class=’yt-lockup-tile yt-lockup-video’]') private List videoElements;

Освен това можете да използвате @FindAll с множество @FindBy анотации за търсене на елементи, които съответстват на някой от дадените локатори:

@FindAll({@FindBy(how=How.ID, using=”username”), @FindBy(className=”username-field”)}) private WebElement user_name;

Сега, когато можем да представим уеб страниците като Java класове и да използваме Page Factory, за да инициализираме WebElement променливите лесно, време е да видим как можем да напишем прости тестове на Selenium, като използваме шаблона Page Object и Page Factory.

Прост проект за автоматизация на тестове за селен в Java

За нашия урок за модел на обект на страница, нека автоматизираме програмиста да се регистрира за ApeeScape. За да направим това, трябва да автоматизираме следните стъпки:

  • Посетете www.toptal.com

  • Кликнете върху бутона „Кандидатстване като разработчик“

  • На страницата на портала първо проверете дали е отворен

  • Кликнете върху бутона „Присъединяване към ApeeScape“

  • Попълнете формуляра

  • Изпратете формуляра, като кликнете върху бутона „Присъединете се към ApeeScape“

Създаване на проект

  • Изтеглете и инсталирайте Java JDK

  • Изтеглете и инсталирайте InteliJ Идея

  • Създайте нов проект на Maven

  • Свържете „Project SDK“ с вашия JDK, например: на Windows „C: Program Files Java jdkxxx“

  • Настройка на groupId и артефактId:

    отмяната на стъкло Стигъл предизвика финансовата криза
SeleniumTEST Test
  • Добавете зависимости Selenium и JUnit Maven във вашия проект POM файл
junit junit ${junit.version} test org.seleniumhq.selenium selenium-firefox-driver ${selenium.version} org.seleniumhq.selenium selenium-support ${selenium.version} org.seleniumhq.selenium selenium-java ${selenium.version}

Заменете версията на Selenium и JUnit с най-новите номера на версиите, които могат да бъдат намерени чрез търсене на JUnit Maven в Google и на сайта на Selenium.

На този етап, ако е разрешено автоматичното изграждане, зависимостите трябва да започнат да се изтеглят автоматично. Ако не, просто активирайте Plugins> install> install: install под панела Maven Projects от дясната страна на вашата IntelliJ Idea IDE.

екранен урок за тестване на селен IDE

След като проектът бъде стартиран, можем да започнем да създаваме нашия тестов пакет под „src / test / java“. Името на пакета „com.toptal“ и създайте още два пакета под него: „com.toptal.webpages“ и „com.toptal.tests“.

снимка на урока за тестване на селен

Ще запазим нашите класове Page Object / Page Factory под „com.toptal.webpages“ и тестовите рутини под „com.toptal.tests“.

Сега можем да започнем да създаваме нашите класове Page Object.

Обект на начална страница

Първият, който трябва да приложим, е за началната страница на ApeeScape (www.toptal.com). Създайте клас под „com.toptal.webpages“ и го наречете „HomePage“.

package com.toptal.webpages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.How; import org.openqa.selenium.support.PageFactory; public class HomePage { private WebDriver driver; //Page URL private static String PAGE_URL='https://www.toptal.com'; //Locators //Apply as Developer Button @FindBy(how = How.LINK_TEXT, using = 'APPLY AS A DEVELOPER') private WebElement developerApplyButton; //Constructor public HomePage(WebDriver driver){ this.driver=driver; driver.get(PAGE_URL); //Initialise Elements PageFactory.initElements(driver, this); } public void clickOnDeveloperApplyButton(){ developerApplyButton.click(); } }

Определяне на локатори на елементи

На началната страница на ApeeScape се интересуваме по-конкретно от един елемент, а именно бутонът „Кандидатстване като разработчик“. Можем да намерим този елемент, като съпоставим текста, което правим по-горе. Докато моделират уеб страници като класове Page Object, намирането и идентифицирането на елементи често може да се превърне в скучна работа. С инструментите за отстраняване на грешки на Google Chrome или Firefox това може да бъде улеснено. Като щракнете с десния бутон върху който и да е елемент на страницата, можете да активирате опцията „Проверка на елемента“ от контекстното меню, за да разберете подробна информация за елемента.

Един често срещан (и предпочитаният от мен) начин е намирането на елементи с помощта на Firefox Разширение FireBug , в комбинация с уеб драйвер на Firefox в Selenium. След като инсталирате и активирате разширението FireBug, можете да щракнете с десния бутон върху страницата и да изберете „Проверка на елемент с FireBug“, за да отворите FireBug. От раздела HTML на FireBug можете да копирате XPath, CSS Path, име на етикет или „Id“ (ако е наличен) на който и да е елемент на страницата.

обектен модел на страница в селен: определяне на локатори на елементи

Като копираме XPath на елемента на екранната снимка по-горе, можем да създадем поле WebElement за него в нашия обект на страница, както следва:

@FindBy(xpath = '/html/body/div[1]/div/div/header/div/h1') WebElement heading;

Или за да улесним нещата, можем да използваме името на маркера „h1“ тук, стига да идентифицира уникално елемента, който ни интересува:

@FindBy(tagName = 'h1') WebElement heading;

Обект на страница на DeveloperPortalPage

След това се нуждаем от обект на страница, който представлява страницата на портала за разработчици, до който можем да стигнем, като кликнете върху бутона „Прилагане като разработчик“.

На тази страница имаме два елемента от интерес. За да определим дали страницата се е заредила, искаме да проверим съществуването на заглавието. И ние също искаме WebElement поле за бутона „Присъединяване към ApeeScape“.

package com.toptal.webpages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class DeveloperPortalPage { private WebDriver driver; @FindBy(xpath = '/html/body/div[1]/div/div/header/div/h1') private WebElement heading; @FindBy(linkText = 'JOIN TOPTAL') private WebElement joinApeeScapeButton; //Constructor public DeveloperPortalPage (WebDriver driver){ this.driver=driver; //Initialise Elements PageFactory.initElements(driver, this); } //We will use this boolean for assertion. To check if page is opened public boolean isPageOpened(){ return heading.getText().toString().contains('Developer portal'); } public void clikOnJoin(){ joinApeeScapeButton.click(); } }

Обект на страница на DeveloperApplyPage

И накрая, за нашия трети и последен обект на страница за този проект, ние дефинираме такъв, който представлява страницата, съдържаща формуляр за кандидатстване за разработчици. Тъй като тук трябва да се справим с множество полета на формуляра, ние дефинираме едно WebElement променлива за всяко поле на формуляра. Намираме всяко поле по неговия „id“ и дефинираме специални методи за задаване за всяко поле, които симулират натискания на клавиши за съответните полета.

package com.toptal.webpages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class DeveloperApplyPage { private WebDriver driver; @FindBy(tagName = 'h1') WebElement heading; @FindBy(id='developer_email') WebElement developer_email; @FindBy(id = 'developer_password') WebElement developer_password; @FindBy(id = 'developer_password_confirmation') WebElement developer_password_confirmation; @FindBy(id = 'developer_full_name') WebElement developer_full_name; @FindBy(id = 'developer_skype') WebElement developer_skype; @FindBy(id ='save_new_developer') WebElement join_toptal_button; //Constructor public DeveloperApplyPage(WebDriver driver){ this.driver=driver; //Initialise Elements PageFactory.initElements(driver, this); } public void setDeveloper_email(String email){ developer_email.clear(); developer_email.sendKeys(email); } public void setDeveloper_password(String password){ developer_password.clear(); developer_password.sendKeys(password); } public void setDeveloper_password_confirmation(String password_confirmation){ developer_password_confirmation.clear(); developer_password_confirmation.sendKeys(password_confirmation); } public void setDeveloper_full_name (String fullname){ developer_full_name.clear(); developer_full_name.sendKeys(fullname); } public void setDeveloper_skype (String skype){ developer_skype.clear(); developer_skype.sendKeys(skype); } public void clickOnJoin(){ join_toptal_button.click(); } public boolean isPageOpened(){ //Assertion return heading.getText().toString().contains('Apply to join our network as a developer'); } }

Писане на прост тест за селен

С класовете на Page Object, представляващи нашите страници, и потребителските взаимодействия като техни методи, сега можем да напишем нашата проста тестова рутина като поредица от прости извиквания и твърдения на методи.

package com.toptal.tests; import com.toptal.webpages.DeveloperApplyPage; import com.toptal.webpages.DeveloperPortalPage; import com.toptal.webpages.HomePage; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import java.net.URL; import java.util.concurrent.TimeUnit; public class ApplyAsDeveloperTest { WebDriver driver; @Before public void setup(){ //use FF Driver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void applyAsDeveloper() { //Create object of HomePage Class HomePage home = new HomePage(driver); home.clickOnDeveloperApplyButton(); //Create object of DeveloperPortalPage DeveloperPortalPage devportal= new DeveloperPortalPage(driver); //Check if page is opened Assert.assertTrue(devportal.isPageOpened()); //Click on Join ApeeScape devportal.clikOnJoin(); //Create object of DeveloperApplyPage DeveloperApplyPage applyPage =new DeveloperApplyPage(driver); //Check if page is opened Assert.assertTrue(applyPage.isPageOpened()); //Fill up data applyPage.setDeveloper_email(' [email protected] '); applyPage.setDeveloper_full_name('Dejan Zivanovic Automated Test'); applyPage.setDeveloper_password('password123'); applyPage.setDeveloper_password_confirmation('password123'); applyPage.setDeveloper_skype('automated_test_skype'); //Click on join //applyPage.clickOnJoin(); } @After public void close(){ driver.close(); } }

Изпълнение на теста

На този етап структурата на вашия проект трябва да изглежда така:

пример за тестване на селен

разлика между s-corp и c-corp

Ако искате да стартирате теста, изберете „ApplyAsDeveloperTest“ от дървото, щракнете с десния бутон върху него и след това изберете Изпълнете ‘ApplyAsDeveloperTest’ .

пример за тестване на селен

След като тестът е стартиран, можете да видите резултатите в долния ляв ъгъл на вашата IDE:

пример за тестване на селен

Заключение

Page Object и Page Factory улесняват моделирането на уеб страници в Selenium и тестването им автоматично и улеснява живота на разработчиците и QAs много по-просто. Когато се свършат правилно, тези класове на Page Object могат да бъдат използвани повторно в целия ви тестов пакет и да си дадете възможност да внедрите автоматизирани тестове на Selenium за вашите проекти в началото, без да нарушавате пъргавото развитие. Чрез абстрахиране на потребителските взаимодействия в обектните модели на вашата страница и поддържане на вашите тестови рутини леки и лесни, можете да приспособите своя тестов пакет към променящите се изисквания с малко усилия.

Надявам се, че успях да ви покажа как да пишете хубав и изчистен тестов код, който е лесен за поддръжка. Ще завърша статията с моя любим QA цитат:

Помислете два пъти, кодирайте веднъж!

Свързани: Уеб изстъргване с браузър без глава: Урок за кукловоди

Разбиране на основите

Какво представлява Page Object model в Selenium?

Модел на обект на страница е модел на обектен дизайн в Selenium. Уеб страниците са представени като класове, а елементите на страницата са дефинирани като променливи в класа, така че потребителските взаимодействия след това могат да бъдат внедрени като методи в класа.

Защо използваме селен?

Селенът е предназначен да автоматизира уеб браузърите, като по този начин дава възможност на софтуерните инженери да ускорят значително и да автоматизират тестването. Докато автоматизацията на тестовете е основната му употреба, Selenium може да се използва и за автоматизиране на определени повтарящи се действия, като основни административни задачи.

Какво е тестване на селен?

Тестването на селен е процесът на използване на набор от софтуерни инструменти на Selenium за улесняване на автоматизацията на тестовете. В повечето случаи софтуерните инженери избират един до два инструмента Selenium за тази задача, но могат да се използват допълнителни инструменти, за да отговорят на различни нужди.

Каква е разликата между обектния модел на страница и Page Factory?

Моделът на обект на страница е модел на проектиране, както е посочено по-рано в този раздел. Page Factory разширява функционалността на модела Page Object чрез въвеждане на по-разширени функции. Позволява на потребителите да инициализират конкретни елементи в модела Page Object, използвайки анотации.

Трябва ли да преосмислим използването на EBITDA?

Рентабилност И Ефективност

Трябва ли да преосмислим използването на EBITDA?
Превръщане на данни за тестване на използваемост в действие, без да полудявате

Превръщане на данни за тестване на използваемост в действие, без да полудявате

Ux Дизайн

Популярни Публикации
Изцеление на скъсани вериги за доставки: производство извън Китай
Изцеление на скъсани вериги за доставки: производство извън Китай
Включете Angular 2: Надстройка от 1.5
Включете Angular 2: Надстройка от 1.5
Урок за работен поток за проектиране за разработчици: Осигурете по-добър UI / UX навреме
Урок за работен поток за проектиране за разработчици: Осигурете по-добър UI / UX навреме
PHP Frameworks: Избор между Symfony и Laravel
PHP Frameworks: Избор между Symfony и Laravel
Шевморфизъм, плосък дизайн и възходът на типографския дизайн
Шевморфизъм, плосък дизайн и възходът на типографския дизайн
 
.NET Core - да станем диви и с отворен код. Microsoft, какво ти отне толкова време ?!
.NET Core - да станем диви и с отворен код. Microsoft, какво ти отне толкова време ?!
Крайно ръководство за езика за обработка, част I: Основите
Крайно ръководство за езика за обработка, част I: Основите
Ractive.js - Уеб приложения, направени лесно
Ractive.js - Уеб приложения, направени лесно
Защо има толкова много Pythons?
Защо има толкова много Pythons?
Съвети и инструменти за оптимизиране на приложения за Android
Съвети и инструменти за оптимизиране на приложения за Android
Популярни Публикации
  • как да използвате приложението invision
  • кой е един от начините, по които отрицателното търговско салдо може да бъде преобразувано в платежен баланс от din_perelink?
  • избройте и обяснете три правила за организация на възприятието
  • как да получите туитове от twitter api в python
  • как да изпратите erc20 токени
  • как да си направим google стъкло
Категории
  • Управление На Проекти
  • Дизайн На Марката
  • Процес На Проектиране
  • Начин На Живот
  • © 2022 | Всички Права Запазени

    portaldacalheta.pt