Селенът е набор от библиотеки, който се използва за емулиране на взаимодействието на потребителя с браузър.
Потребителите пишат скриптове, използвайки библиотеки от селен, за да симулират общите взаимодействия на потребителския браузър, като например навигация до страница, щракване върху бутон и попълване на формуляр.
Селенът често се използва в проекти, които изграждат уеб интерфейсни приложения (UI). Използва се за автоматизиране на сценарии, които имитират взаимодействието на потребителя с уеб приложението.
За да използваме Selenium WebDriver в проект, първо трябва да инсталираме Selenium Core и WebDriver Binaries.
Също така трябва да зададем пътя за всеки изпълним драйвер.
Ако искате да използвате Selenium с Java, тогава най-лесният начин да инсталирате Selenium е чрез зависимост на Maven във вашия проект pom.xml
файл:
org.seleniumhq.selenium
selenium-java
3.141.59
За да стартирате тестове за селен в браузъра Google Chrome или Firefox, трябва да добавите съответната зависимост във вашия pom.xml
файл:
org.seleniumhq.selenium
selenium-chrome-driver
3.141.59
org.seleniumhq.selenium
selenium-firefox-driver
3.141.59
За да изпълните тестове на Selenium в определен браузър, трябва да имате инсталирани съответните двоични файлове на WebDriver, специфични за браузъра, и да зададете правилния път.
Chrome За да зададете пътя към изпълнимия хром в 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');
Internet Explorer:
System.setProperty('webdriver.ie.driver', 'C:/path/to/IEDriver.exe');
След като инсталирате Selenium, следващото е да направите екземпляр на конкретен драйвер на браузъра, за да стартирате тестовете на потребителския интерфейс.
Тестовете за селен се изпълняват срещу потребителския интерфейс на приложение и изискват браузър за работа. Можем да посочим срещу кой браузър искаме да стартираме тестовете си и след това да създадем екземпляр на подходящия драйвер.
Забележка:Тестовете за селен се използват само за Автоматизация на потребителския интерфейс и тестовете се изпълняват срещу браузър.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();
Методът за отказ ще:
Преди да можем да взаимодействаме с уеб елемент, трябва да намерим елемента на html страницата.
Едно от най-важните умения на инженер за автоматизация на тестове, работещ със Selenium WebDriver, е да може да използва подходящи методи за намиране на елементи на страница.
Например, ако искаме да щракнем върху връзка, да проверим дали се показва съобщение или да щракнем върху бутон, първо трябва да намерим елемента.
Selenium WebDriver предоставя различни методи за намиране на елементи на страница.
Локатор описва какво искате да намерите на страница. В Java създаваме локатор, използвайки 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'));
Забележка:Атрибутът class се използва за стилизиране на страници и така има вероятност много елементи да имат същия клас.По 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'));
Намира елементи чрез основния двигател на W3 CSS Selector на драйвера. Локаторът на CSS селектор е мощен, тъй като може да се използва за намиране на всеки елемент на страница.
Forgotten Password
След това можем да намерим имейл полето чрез атрибута на входното име
driver.findElement(By.cssSelector('#change-password'));
Тук, #
представлява id на елемента. И .
нотация представлява атрибут на клас на елемент.
Например:
driver.findElement(By.cssSelector('.btn'));
Свързани:
Локаторите XPath са най-сложният селектор за използване. Необходими са знания в езика на заявките XPath, така че ако не владеете добре този език на заявки, ще ви бъде трудно да намерите елементи, използващи заявки XPath.
Нека разгледаме пример за използване на XPath за този HTML:
Change Password
След това можем да намерим имейл полето чрез атрибута на входното име
driver.findElement(By.xpath('//a[@id='change-password']'));
След като намерим елемент на страницата, можем да взаимодействаме с него, използвайки разнообразни методи, които селенът предоставя.
Selenium WebDriver предоставя редица начини за взаимодействие с уеб елементи, като щракване върху бутоните за изпращане и въвеждане на текст в полетата за въвеждане.
WebElement
class има редица методи, които можем да използваме за взаимодействие с елементи на страницата. Най-често срещаните са:
click()
clear()
sendKeys()
submit()
click()
метод се използва за щракване върху уеб елемент като връзка или бутон.
Пример:
Menu
WebElement mToggle = driver.findElement(By.id('menu-toggle')); mToggle.click();
clear()
метод изчиства стойността на полето за въвеждане.
Пример:
WebElement username = driver.findElement(By.id('username')); username.clear();
Използваме sendKeys()
метод за въвеждане на символи в полето за въвеждане.
Пример:
WebElement username = driver.findElement(By.id('username')); username.sendKeys('jondoe');
По-долу е даден пример за използване на Selenium за попълване на формуляр
username:
Last name:
WebElement username = driver.findElement(By.id('username'));
username.sendKeys('jondoe');
WebElement password = driver.findElement(By.id('password'));
password.sendKeys('secret');
WebElement submit = driver.findElement(By.cssSelector('input[type='submit']'));
submit.click();
След като разгледахме основите на Selenium WebDriver, е време да изградим рамка.
Научете как да изградите селена рамка от нулата.
Първата част на урока предоставя стъпка по стъпка как да създадете рамка на селен WebDriver с помощта на Java, Maven и TestNG.
Втората част се фокусира върху структурирането на селеновите тестове въз основа на известния Page Object Model.