Урок за селен - Научете автоматизацията на браузъра с Selenium WebDriver

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

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

Селенът често се използва в проекти, които изграждат уеб интерфейсни приложения (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 файл:

Google Chrome Browser


org.seleniumhq.selenium
selenium-chrome-driver
3.141.59

Браузър Firefox


org.seleniumhq.selenium
selenium-firefox-driver
3.141.59

Инсталирайте двоични файлове на WebDriver и задайте пътя

За да изпълните тестове на 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, следващото е да направите екземпляр на конкретен драйвер на браузъра, за да стартирате тестовете на потребителския интерфейс.

Тестовете за селен се изпълняват срещу потребителския интерфейс на приложение и изискват браузър за работа. Можем да посочим срещу кой браузър искаме да стартираме тестовете си и след това да създадем екземпляр на подходящия драйвер.

Забележка:Тестовете за селен се използват само за Автоматизация на потребителския интерфейс и тестовете се изпълняват срещу браузър.

Chrome

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

Firefox

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();

Internet Explorer

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 адрес

Можем да получим URL адреса на текущата страница:

driver.getCurrentUrl();

Вземете заглавие на страницата

Можем да получим заглавието на текущата страница:

driver.getTitle();

Вземете източника на страницата

Можем да получим източника на текущата страница:

driver.getPageSource();

Затваряне и излизане от сесията на браузъра

За да затворите текущия прозорец на браузъра:

driver.close(); Забележка:Затваряне на прозореца на браузъра не прекратяване на сесията WebDriver.

За да излезете от сесията на WebDriver в края на тестването, използвайте:

driver.quit();

Методът за отказ ще:

  • Затворете всички прозорци, свързани с тази сесия WebDriver
  • Убийте процеса на браузъра
  • Убийте процеса на драйвера


Локатори на селен - Как да намерите уеб елементи

Преди да можем да взаимодействаме с уеб елемент, трябва да намерим елемента на 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'));

От селектори на Css

Намира елементи чрез основния двигател на W3 CSS Selector на драйвера. Локаторът на CSS селектор е мощен, тъй като може да се използва за намиране на всеки елемент на страница.

Forgotten Password

След това можем да намерим имейл полето чрез атрибута на входното име

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

Тук, # представлява id на елемента. И . нотация представлява атрибут на клас на елемент.

Например:

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

Свързани:

Чрез XPath

Локаторите 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() метод изчиства стойността на полето за въвеждане.

Бакшиш:Препоръчително е да използвате .clear () метод преди въвеждане на текст в поле за въвеждане.

Пример:

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

SendKeys

Използваме 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.