Как да извършите уеб тестване със Selenium стъпка по стъпка

Последна актуализация: 19/04/2026
Автор: Isaac
  • Selenium ви позволява да автоматизирате функционалното уеб тестване в множество браузъри, езици и операционни системи.
  • Използването на добри локатори, изрични чакания и обектния модел на страницата осигурява по-стабилни и поддържаеми тестове.
  • Интегрирането на Selenium с рамки като JUnit, TestNG, Cucumber и Selenium Grid улеснява мащабирането на регресии и подобрява съвместимостта.
  • Автоматизирането със Selenium драстично намалява времето за тестване и подобрява качеството на уеб приложенията.

Автоматизирано уеб тестване със Selenium

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

В този диапазон, тестването на уеб приложения се е превърнало в ключова област. Именно тук се намесва Selenium, вероятно... най-разпространената рамка за уеб автоматизация на света. С него можете да симулирате почти всяко взаимодействие на реален потребител в браузър и да го превърнете в възпроизводим, стабилен и изпълним тест във всяка среда.

Какво представляват функционалните тестове и защо са толкова важни?

Когато говорим за функционални тестове, имаме предвид тези, които се опитват да отговорят на много специфичен въпрос: Прави ли приложението това, което потребителят има нужда и очаква? При този тип тестване всяка функционалност се сравнява със свързаните с нея изисквания, обикновено дефинирани в документ със спецификация на софтуерните изисквания (SRS).

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

На практика функционалното тестване обикновено се фокусира върху три фронта: първо, валидиране на основните функции на приложението (регистрация на потребител, покупка, търсене, резервации и др.); от друга страна, за да проверите минимално приемлива навигация (че потребителят може да се движи свободно през екраните); и накрая, преглед на аспекти на основна достъпност и използваемост които обуславят действителната употреба на продукта.

Ако тези тестове се провалят или бъдат пропуснати, проблемът не е само технически: това, което страда, е удовлетвореност на крайния потребител И следователно, бизнес целите, свързани с продукта. Ето защо е напълно логично да инвестирате време в автоматизирането им с мощни инструменти като Selenium.

Видове функционални тестове на системно ниво

В рамките на функционалните тестове, фокусирани върху цялостното поведение на приложението и уеб интерфейса, има три типа, които обикновено се повтарят отново и отново и които пасват идеално на Selenium.

Първата група са Тестване на димТова са много основни тестове, които се изпълняват всеки път, когато се генерира нова системна компилация, за да се провери дали основните потребителски пътища не са повредени. Те не целят изчерпателно покритие, а по-скоро да валидират дали продуктът е поне „тестируем“ без сривове.

Второ, ние имаме Регресионни тестовеНеговата мисия е да потвърди, че след въвеждане на промени (нови функции, рефактори, корекции на грешки, спешни корекции), съществуващите поведения продължават да функционират както преди. Тези тестове са по-бавни и по-обширни и тук автоматизацията със Selenium прави огромна разлика по отношение на време и надеждност.

Третият тип са интеграционно тестване На системно ниво фокусът е върху валидирането на правилното взаимодействие между различните модули (front-end, back-end, външни услуги, платежни шлюзове и др.). Винаги, когато се добавя нова функция, която засяга множество компоненти, е изключително важно да се гарантира, че нищо не се поврежда в околните области. Selenium, работещ на ниво браузър, е идеален за валидиране на тези интеграции от гледна точка на потребителя.

Какво е селен и как се е развил?

Селенът е набор от инструменти с отворен код за автоматизиране на уеб браузъриЧрез общ API, той ви позволява да пишете тестови скриптове на различни езици за програмиране, като Java, C#, Python, JavaScript, Ruby, PHP или Kotlin, и да ги изпълнявате в браузъри като Chrome, Firefox, Edge, Safari или други, базирани на Chromium, на операционни системи като Windows, Linux или macOS.

Историята му започва през 2004 г. в ThoughtWorks, когато Джейсън Хъгинс се нуждае от рамка за тестване на вътрешно приложение за време и разходи. Това, което започна като вътрешна помощна програма, се разви, след няколко итерации и приноси от хора като Пол Хамант, Дан Фабулич, Нелсън Спроул, Пат Лайтбоди, Шиня Касатани и Саймън Стюарт, в... пълна екосистема, състояща се от Selenium IDE, Selenium WebDriver и Selenium Grid.

Името също има любопитен произход: произлиза от шега, в която се споменаваше, че отравяне с живак (визирайки друг инструмент за тестване от онова време) може да се „излекува“ чрез прием на добавки със селен. Шегата се запази и в крайна сметка се превърна в бранда на проекта.

С течение на времето, Selenium Remote Control (Selenium RC), известен като Selenium 1, беше обединен с WebDriver (Selenium 2.0) и в крайна сметка беше отхвърлен в полза на WebDriver. По-късно се появи Selenium 3, който консолидира стандарта W3C и в момента... Селен 4 Той включва много практични нови функции като „Относителни локатори“ и специфични подобрения за браузърите Chromium и Firefox.

Инструментите, които съставляват екосистемата на Selenium

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

  Как да импортирате и управлявате вашите ресурси в Canva като професионалист

Selenium IDE

Selenium IDE е интегрирана среда за разработка под формата на разширение За Firefox и Chrome. Позволява ви да записвате, възпроизвеждате, редактирате и отстранявате грешки в тестове, без да пишете код, разчитайки на собствен език, известен като Selanese, който дефинира команди като „щракнете тук“, „проверете този текст“, „попълнете това поле“ и т.н.

Особено полезно е, когато Той започва без много опит в програмирането или автоматизацията.Това ви позволява да създавате прости случаи или основни пакети, които след това могат да бъдат експортирани в Selenium WebDriver на различни езици за програмиране. Полезно е и за бързо тестване на скриптове във Firefox и Chrome или за задействане на малки фрагменти от JavaScript с runScript.

Селен WebDriver

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

За да го използвате, изтегляте драйвер, специфичен за браузъра (като ChromeDriver за Chrome/Chromium), пътят му е конфигуриран и WebDriver е инициализиран на избрания език. Например в Java с Chrome:

System.setProperty("webdriver.chrome.driver", "път/до/драйвера"); Драйвер за WebDriver = нов ChromeDriver();

Оттам можете да навигирате до URL адрес, използвайки `get()`, да извличате данни от браузъра, като например заглавие, текущ URL адрес или идентификатор на прозорец, и да намирате елементи на страницата, с които да взаимодействате. Освен това, WebDriver се интегрира безпроблемно с библиотеки като JUnit, TestNG, Краставица или други, както и със строителни инструменти като например Maven.

Решетка от селен

Selenium Grid решава проблема с мащабирането. Това е... сървър, който позволява паралелно изпълнение на тестове в множество браузъри и операционни системи чрез централен хъб, който координира няколко отдалечени възела.

Хъбът изпраща заявки за изпълнение и ги разпределя между наличните възли, като драстично намалява общото време за изпълнение на пакета. Това е особено полезно, когато имате нужда тестване за съвместимост (кросбраузърна и кросплатформена) или когато искате да задействате голяма регресия за кратко време, дори разчитайки на облачни среди, като тези, предлагани от доставчици като LambdaTest.

Локатори на елементи в Selenium: основата на всичко

Един от крайъгълните камъни на стабилното тестване на Selenium е как се локализират DOM елементите. WebDriver предлага прости и усъвършенствани механизми за локализация чрез класа By, всеки с предимства и недостатъци.

Сред простите локатори, които имаме By.id() (по атрибут id), By.name() (по атрибут на име), By.tagName() (по име на етикет, като например вход), By.className() (по CSS клас) и тези, специфични за връзките By.linkText() и By.partialLinkText(), които използват видимия текст на връзката.

Ако структурата на страницата е по-сложна, влизат в действие усъвършенствани локатори, като например By.cssSelector()което позволява използването на много прецизни CSS селектори и By.xpath()което предоставя огромна мощ за навигиране в HTML и локализиране на „неподходящи“ елементи. Освен това в Selenium 4 откриваме Относителни локаторикоито ви позволяват да локализирате елементи въз основа на тяхната позиция спрямо други, със синтаксис, много близък до начина, по който хората говорят.

Типичен пример за относителни локатори в Java би бил нещо подобно: RelativeLocator.with(By.tagName(«вход»)).above(By.id(«парола»))което би търсило входните данни, разположени над полето с идентификатор „парола“. Тези стратегии са много полезни, когато не можете да изградите ясен селектор върху изолиран елемент.

Най-добрата практика тук е ясна: винаги опитвайте локатори. уникален, стабилен и възможно най-некрехъкАбсолютен XPath на стила /html/body/div[25]/div[2]/div/span/section[2]/div/h2/p Ще се повреди веднага щом HTML кодът се промени дори леко. Относителен XPath, базиран на атрибути или съответния текст на елемента, е по-добър, или дори по-добре, добре дефинирани ID или data-test-ids от разработката.

Необходими са уеб и програмни умения за свободно използване на Selenium

За да извлечете максимума от Selenium, простото копиране и поставяне на примери не е достатъчно. Наличието на известен опит ще бъде много полезно. познаване на HTML и CSSи се чувствайте комфортно да отворите инспектора на елементите на браузъра, за да разберете как изходният код на страницата се преобразува в това, което виждате на екрана.

Също така е важно да можете да се справяте с инструменти за разработка на браузъри (Chrome DevTools, Firefox DevTools и др.) и с концепции като XPath или CSS селектори. Ще прекарате много време в проверка на елементи, тестване на локатори и проверка на това, което уникално идентифицира това, което искате да автоматизирате.

От страна на програмирането, ако целта ви е да се посветите на инженерство за автоматизирано тестванеЩе трябва да приемете, че писането на код е част от работата. Добрата новина е, че типът код, който пишете със Selenium, е ограничен и силно фокусиран върху специфични действия (навигация, локализиране, кликване, валидиране). Това е отлична начална точка, ако идвате от по-функционален произход.

В зависимост от избрания от вас език (Java, Python, C#, JavaScript и др.), може да се интересувате и от изучаването на рамка за бенчмарк тестване от екосистемата: например JUnit или TestNG в Java, pytest или unittest в Python, NUnit в C# или Jest/Mocha в света на JavaScript. Тези рамки осигуряват структурата на тестовите случаи, твърденията и интеграцията с външни инструменти.

Конфигурирайте вашата Selenium среда стъпка по стъпка

Доста често срещана настройка в Java проекти е използването на Проект Maven със зависимости от Selenium WebDriver, JUnit 5 (или TestNG) и, ако работи в BDD, Cucumber. Maven обработва и интегрира всички зависимости и опростява изграждането, тестовете и внедряването.

В допълнение към библиотеките, трябва да изтеглите Уеб драйвер за целеви браузърВ случая с Chrome, това би бил ChromeDriver, който трябва да е достъпен за системата (например, в PATH или чрез указване на пътя му с System.setProperty). След като това е направено, създавате инстанция на драйвера и можете да стартирате браузъра директно от вашия код.

  Как да намалите консумацията на енергия на лаптопи с Windows 11

След като драйверът е създаден, първата типична команда е за навигиране до страница: driver.get(«https://rahulshettyacademy.com/seleniumPractise/#/»);Оттам можете да поискате информация от браузъра (заглавие, текущ URL адрес, идентификатор на прозорец) или да започнете да локализирате елементи с By и да взаимодействате с тях.

За да се гарантира, че тестовете завършват гладко, е важно да се запомнят извикванията към драйвер.close() или driver.quit() в края на теста, освобождавайки сесията и свързаните с нея ресурси на браузъра.

Имплицитни чакания, експлицитни чакания и AJAX

Класическа грешка в началото е, че вашите Selenium скриптове се изпълняват „твърде бързо“ и се опитват да взаимодействат с елементи, които все още не са създадени или рендирани. Това се случва, когато съобщения като елементът не е намерен или взаимодействия, които винаги работят ръчно, но периодично се провалят, когато са автоматизирани.

Първоначалното изкушение обикновено е да се дръпне Thread.sleep() и вмъкване на фиксирани паузи тук-там, но това е лоша практика, която прави тестовете крехки и бавни. Вместо това, Selenium предлага имплицитни очаквания и експлицитни очаквания за синхронизиране с приложението.

Имплицитните чакания са конфигурирани в WebDriver и му казват колко дълго да се опитва да намери елемент, преди да се откаже. Например в Java: driver.manage().timeouts().implicitlyWait(Продължителност.ofMillis(500));Това е бързо решение, но не е много детайлно.

От друга страна, изричните периоди на изчакване позволяват изчакване за изпълнение на дадено условие. специфично условие на елемент: да е видимо, да може да се кликва върху него, да съществува в DOM и т.н. Например, в Java можете да напишете нещо подобно: WebElement orderBtn = new WebDriverWait(драйвер, Duration.ofSeconds(2)).until(ОчакваниУсловия.visibilityOfElementLocated(От.xpath(«//бутон[съдържа(текст(),'Направи поръчка')]»)));.

В съвременни приложения с интензивно използване на AJAX и библиотеки като jQuery, понякога е полезно да се направи още една крачка напред и проверете състоянието на асинхронните повикванияSelenium WebDriver ви позволява да изпълнявате произволен JavaScript в контекста на страницата, така че е възможно например да стартирате скрипт, който проверява дали jQuery е завършил всичките си заявки и едва след това да продължите с теста, прилагайки по-стабилни стратегии за „Smart Waiting“.

От самостоятелни скриптове до професионална рамка: Page Object Model и BDD

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

Отговорът на този хаос е моделът Page Object Model (POM)Идеята е проста, но мощна: отделете тестовата си логика (какво искате да проверите) от логиката на взаимодействие за всяка страница (как се прави технически). За да направите това, създайте клас за всяка страница на приложението (LoginPage, LandingPage, CheckoutPage и т.н.).

Всеки обект на страница съхранява селектори на съответните елементи И пишете методи от високо ниво, които представляват потребителските действия: login(потребителско име, парола), searchItem(име), addToCart(), checkoutItems() и т.н. Вашите тестове, вместо да съдържат XPaths и твърд CSS, извикват тези методи, което прави кода много по-четим и лесен за поддръжка.

Ако оформлението на страницата се промени, обикновено е необходимо само да коригирате локаторите в съответния обект на страница. В големи регресионни пакети това спестява много време. брутално количество време за поддръжкаОсвен това, POM може да се комбинира с шаблона Page Factory, за да се опрости допълнително дефинирането на елементи.

В среди, където се използват гъвкава методология и подход, базиран на поведението (BDD), е много често срещано интегрирането Селен с краставицаCucumber ви позволява да описвате бизнес сценарии на езика Gherkin, много близък до естествения език, и след това да свързвате всеки ред („Дадено“, „Когато“, „Тогава“) с Java методи или избрания език, известни като Step Definitions (Дефиниции на стъпки).

Тези дефиниции на стъпки не трябва да съдържат директно логиката на Selenium, а по-скоро да разчитат на обекти на страница. По този начин, стъпка като Когато потребителят е търсил с кратко име и извлечено текущо име на продукта Ще се извикат методи на LandingPage, за да се търси и получава името на продукта, оставяйки селекторите капсулирани в този клас.

Интеграция с тестови рамки и практически примери

Често използван модел е комбинирането на Selenium WebDriver с JUnit 5 В Java всеки метод, анотиран с @Test, може да отвори браузъра, да изпълни специфичен потребителски поток и след това да използва твърдения, за да валидира очакваните резултати.

Например, при тест за покупка можете: да отидете на страницата, да потърсите „Broco“, да увеличите количеството с бутона „+“, да прочетете въведената стойност на количеството и да проверите дали е 2, и допълнително да проверите дали заглавието на страницата съответства на очакваното. Всичко това е оркестрирано от JUnit, като WebDriver извършва действията във фонов режим.

Освен JUnit, много екипи предпочитат ТестNG заради своите разширени възможности за групиране на тестове, зависимости и паралелно изпълнение. За визуално отчитане, решения като ExtentReports или Allure Те ви позволяват да генерирате подробни отчети със снимки на екрана, история на изпълнението и показатели, които улесняват анализа на неуспехите.

Когато Selenium се комбинира с Cucumber, се получават няколко предимства: ясни описания на сценарии в Gherkin, ясно разделение между бизнес стъпките и техническата логика и... по-лесна за поддръжка организация от тестовия код. Всичко това се интегрира безпроблемно в Maven/Gradle среди и CI/CD конвейери.

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

Едно от най-големите предизвикателства в уеб автоматизацията е колко много се променя потребителският интерфейс с течение на времето. Като инженер по автоматизация, ще трябва да се справите с това. фалшиви аларми за повреди не поради действителни грешки, а поради промени в приложението или инфраструктурата.

  Всичко, което можете да правите с изкуствен интелект в ежедневието си

Типичните проблеми могат да бъдат групирани в четири категории: грешки в самия тест (бъгове в автоматизацията), повреди в средата (прекъсвания на сървъра, непоследователни данни), безобидни промени в потребителския интерфейс, които нарушават селекторите, и неочаквани промени, които са действителни дефекти. Разграничаването между тях е част от ежедневието.

За да се сведе до минимум въздействието на промените, е ключово да се използва стабилни стратегии за местоположение (стабилни идентификатори, атрибути за тестване на данни, добре обмислени относителни XPath-ове) и модели като Page Object Model, които концентрират селекторите в няколко точки от кода.

Времето за изчакване също влияе върху стабилността: прекалено агресивните или лошо конфигурирани настройки могат да причинят периодични прекъсвания. Стратегии като добре проектирани изрични чакания или интелигентни чакания за AJAX Те помагат за намаляване на фалшиво отрицателните резултати и правят тестовете по-устойчиви на пикове на латентност или малки вариации във времената за зареждане.

Инструменти, които се интегрират със Selenium, за да предложат [различни предимства], също започват да се появяват в екосистемата. възможности за самовъзстановяване на тестове и интелигентен подборНякои търговски решения прилагат евристики и изкуствен интелект, за да открият дали дадена повреда произтича от повреден локатор или от реален проблем, да предлагат нови локатори в движение и дори да позволяват изпълнението само на тестовете, засегнати от конкретна промяна в кода, скъсявайки циклите на обратна връзка.

Какви видове тестове можете да автоматизирате със Selenium и кога си струва?

Селенът блести особено на четири фронта: тестове на функционален потребителски интерфейс (UI)Регресия, съвместимост и цялостно внедряване. Във всички тях целта е да се симулира пътуването на реален потребител през уеб приложението.

По отношение на функционалността, Selenium се справя с дистанционното управление на браузъра, локализирането на елементи от интерфейса (входни данни, бутони, падащи менюта, връзки) и симулира действия като попълване на полета, избиране на опции, кликване или валидиране на съобщения. Той е идеален за случаи като... регистрация на потребители, вход, процеси на покупка, търсения или който и да е ключов бизнес поток.

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

По отношение на съвместимостта, поддръжката на Selenium за множество браузъри и операционни системи гарантира, че приложението се представя добре на различни платформи. комбинации от браузър, система и резолюцияИ при цялостно тестване, пълните потоци могат да бъдат свързани във верига, от търсенето на продукт до плащането и окончателното потвърждение.

Типичен пример за сценарий, който трябва да бъде автоматизиран, е регистрацията на потребител: достъп до URL адреса за регистрация, въвеждане на невалидни данни за проверка дали валидациите работят, проверка за съобщения за грешки, въвеждане на валидни данни, потвърждаване на регистрацията и проверка дали се показва персонализиран начален екран. Ръчното извършване на това във всички комбинации на браузъри и системи може да отнеме дни; със Selenium, след като бъде изграден, той може да се изпълнява толкова пъти, колкото е необходимо.

Предимства, ограничения и съвременни алтернативи на селена

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

Освен това, благодарение на Selenium Grid, можете да провеждате тестове паралелно, намалявайки времето за регресия, и напълно да персонализирате отчетите и работните процеси за непрекъсната интеграция с инструменти като Jenkins, GitLab CI или GitHub Actions.

Сред недостатъците трябва да се спомене, че сам по себе си селенът не покрива оригинални настолни или мобилни приложенияЗа тези цели са необходими допълнителни решения като Appium. Той също така не включва по подразбиране усъвършенстван механизъм за отчитане: трябва да бъде интегриран с други библиотеки, за да генерира атрактивни отчети. И изисква минимално ниво на познания по програмиране, което може да бъде пречка за чисто ръчните тестери.

През последните години, алтернативи като Кипарис, драматург или каталонCypress е много популярен за съвременни уеб приложения, с плавна крива на обучение, но работи предимно в контекста на браузъра и му липсва същият крос-браузърен фокус като Selenium. Playwright на Microsoft предлага модерен API и силна многобраузърна поддръжка с отлична стабилност. Katalon, от друга страна, предоставя по-лесен за потребителя слой и визуални инструменти, наред с различни автоматизирани двигатели.

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

Като цяло, овладяването на Selenium ви позволява да автоматизирате всичко - от най-основните работни процеси до огромни регресионни пакети, да ги интегрирате в CI/CD конвейери и значително да повишите нивото на качество на всяко уеб приложение, като същевременно намалявате времето за тестване и пускане на софтуер и освобождавате QA екипа за задачи с по-висока добавена стойност.