Selenium Уебдрайвер Java Примерна програма

⚡ Умно обобщение

Selenium уебдрайвер Java Примерната програма ще ви преведе през първия ви скрипт за цялостна автоматизация. LessТе обхващат настройка на средата, локализиране на елементи, изпращане на входни данни, навигация, валидиране, изчакване, обработка на изключения и най-добри практики за надеждни WebDriver тестове.

  • Настройка на средата: Инсталирайте Java, Eclipse или IntelliJ, конфигуриране Selenium библиотеки и изберете правилния двоичен файл на драйвера за вашата версия на браузъра.
  • 🧭 Локатори на елементи: Използвайте ID, name, class, XPath, CSS селектор и linkText, за да идентифицирате елементите стабилно в различните браузъри и версии.
  • Действия и входни данни: WebDriver поддържа събития като click, sendKeys, submit, select и keyboard за пълноценно взаимодействие в потребителски стил.
  • Умно чакане: Заменете Thread.sleep с имплицитни, експлицитни и плавни изчаквания, управлявани от ExpectedConditions, за да елиминирате нестабилните тестове.
  • 🚨 Обработка на изключения: Прихващайте NoSuchElementException, TimeoutException и StaleElementReferenceException, за да поддържате автоматизираните пакети устойчиви.
  • 🤖 Генериране на AI тестове: AI асистентите генерират шаблонни WebDriver скриптове, предлагат локатори и автоматично възстановяват селектори, когато DOM се промени.

Selenium уебдрайвер Java Програма

Selenium Java Пример

Използване на Java клас „myclass“, който създадохме в предишния урок, нека се опитаме да създадем WebDriver скрипт, който би:

Стъпка 1: донасям Mercury Начална страница на Tours
Стъпка 2: проверете заглавието му
Стъпка 3: отпечатайте резултата от сравнението
Стъпка 4: затворете го, преди да приключите цялата програма.

Selenium Пример за уеб драйвер Code

По-долу е действителният код на WebDriver за логиката, представена от сценария по-горе

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Забележка: Стартира се Firefox 35, трябва да използвате драйвер за gecko, създаден от Mozilla, за да използвате уеб драйвер. Selenium 3.0, gecko и firefox имат проблеми със съвместимостта и правилното им настройване може да се превърне в трудна задача. Ако кодът не работи, понижете до Firefox версия 47 или по-ниска. Като алтернатива можете да стартирате скриптовете си в Chrome. Selenium работи извън кутията за Chrome. Просто трябва да промените 3 реда код, за да накарате скрипта си да работи с Chrome или Firefox

Обяснение на кода

Импортиране на пакети

За да започнете, трябва да импортирате следните два пакета:

  1. org.openqa.selenium.*– съдържа класа WebDriver, необходим за създаване на нов браузър, зареден със специфичен драйвер
  2. org.openqa.selenium.firefox.Firefoxдрайвер – съдържа FirefoxКлас на драйвер, необходим за инстанциране на a Firefox-специфичен драйвер в браузъра, създаден от класа WebDriver

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

Създаване на обекти и променливи

Обикновено това е начинът, по който се инстанцира обект на драйвер.

WebDriver driver = new FirefoxDriver();

A FirefoxКлас на драйвер без параметри означава, че по подразбиране Firefox профилът ще бъде стартиран от нашия Java програма. По подразбиране Firefox профилът е подобен на стартирането Firefox в безопасен режим (не се зареждат разширения).

За удобство запазихме базата URL и очакваното заглавие като променливи.

Стартиране на сесия на браузър

WebDriver's получи () Методът се използва за стартиране на нова сесия на браузъра и я насочва към URL който посочвате като негов параметър.

driver.get(baseUrl);

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

Класът WebDriver има getTitle() метод, който винаги се използва за получаване на заглавието на текущо заредената страница.

actualTitle = driver.getTitle();

Сравнете очакваните и действителните стойности

Тази част от кода просто използва основен Java if-else структура за сравняване на действителното заглавие с очакваното.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Прекратяване на сесия на браузъра

"близо()” се използва за затваряне на прозореца на браузъра.

driver.close();

Прекратяване на цялата програма

Ако използвате тази команда, без първо да затворите всички прозорци на браузъра, целият ви Java програмата ще приключи, докато прозорецът на браузъра остава отворен.

System.exit(0);

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

Има два начина за изпълнение на код Eclipse SDI.

  1. On Eclipseлентата с менюта на, щракнете Бягай > Бягай.
  2. Натискане Ctrl + F11 за да стартирате целия код.

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

Ако сте направили всичко правилно, Eclipse ще изведе „Тестът премина!“

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

Намиране на GUI елементи

Намирането на елементи в WebDriver се извършва с помощта на „findElement(По.локатор())” метод. Частта „локатор“ на кода е същата като всеки от локаторите, разгледани по-рано в Selenium IDE глави от тези уроци. Всъщност се препоръчва да намерите GUI елементи с помощта на IDE и след успешно идентифициране да експортирате кода в WebDriver.

Тук е Selenium примерен код, който локализира елемент по неговия идентификатор. Facebook се използва като база URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

Използвахме getTagName() метод за extracимето на тага на този конкретен елемент, чийто идентификатор е „email“. Когато се изпълни, този код би трябвало да може правилно да идентифицира името на тага „input“ и да го отпечата на Eclipseпрозорец на конзолата.

Намиране на GUI елементи

Резюме за локализиране на елементи

Вариация Descriptйон Проба
By.className намира елементи въз основа на стойността на атрибута “class”. findElement(By.className(“someClassName”))
Чрез.cssSelector намира елементи въз основа на основния CSS Selector двигател на драйвера findElement(By.cssSelector(“input#email”))
By.id намира елементи по стойността на техния атрибут „id“. findElement(By.id(“someId”))
 
By.linkText намира елемент на връзка по точния текст, който показва findElement(By.linkText(“РЕГИСТРАЦИЯ”))
 
По име намира елементи по стойността на атрибута „име“. findElement(By.name(“someName”))
 
By.partialLinkText намира елементи, които съдържат дадения текст на връзката findElement(By.partialLinkText(“REG”))
 
By.tagName локализира елементите по техните имена на тагове findElement(By.tagName(“div”))
 
По.xpath намира елементи чрез XPath findElement(By.xpath(“//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”))

Забележка относно използването на findElement(By.cssSelector())

By.cssSelector() не поддържа функцията „съдържа“. Помислете за Selenium IDE код по-долу –

Забележка относно използването на findElement(By.cssSelector())

In Selenium IDE по-горе, целият тест премина. Въпреки това в Selenium Скрипт на WebDriver по-долу, същият тест генерира грешка, тъй като WebDriver не поддържа ключовата дума „contains“, когато се използва в метода By.cssSelector().

Забележка относно използването на findElement(By.cssSelector())

Общи команди

Създаване на уеб елементи

Вместо да използвате дългия синтаксис „driver.findElement(By.locator())“ всеки път, когато имате достъп до конкретен елемент, можем да инстанциираме WebElement обект за него. Класът WebElement се съдържа в пакета „org.openqa.selenium.*“.

Създаване на уеб елементи

Щракване върху елемент

Щракването е може би най-често срещаният начин за взаимодействие с уеб елементи. The click() методът се използва за симулиране на щракането на всеки елемент. Следното Selenium Java пример показва как click() се използва за щракване върху Mercury Бутон „Вход“ на Tours.

Щракване върху елемент

Когато използвате метода click(), трябва да имате предвид следните неща.

  • Не приема никакъв параметър/аргумент.
  • Методът автоматично изчаква зареждане на нова страница, ако е приложимо.
  • Елементът, върху който ще се кликне, трябва да е видим (височината и ширината не трябва да са равни на нула).

Вземете команди

Командите Get извличат различна важна информация за страницата/елемента. Ето някои важни команди за получаване, с които трябва да сте запознати.

Команди употреба
получи ()

Примерна употреба:

  • Той автоматично отваря нов прозорец на браузъра и извлича страницата, която сте посочили в скобите му.
  • Това е двойник на Selenium Команда „open“ на IDE.
  • Параметърът трябва да бъде a Низ обект.
getTitle()

Примерна употреба:

  • Няма нужда от параметри
  • Извлича заглавието на текущата страница
  • Белите интервали в началото и в края се изрязват
  • Връща нулев низ, ако страницата няма заглавие
getPageSource()

Примерна употреба:

  • Няма нужда от параметри
  • Връща изходния код на страницата като низова стойност
getCurrentUrl()

Примерна употреба:

  • Няма нужда от параметри
  • Извлича низа, представляващ текущата стойност URL което браузърът разглежда
getText()

Примерна употреба:

  • Извлича вътрешния текст на елемента, който посочите

Команди за навигация

Тези команди ви позволяват да опреснявате, влизате и превключвате напред и назад между различни уеб страници.

навигация().към()

Примерна употреба:

  • Той автоматично отваря нов прозорец на браузъра и извлича страницата, която сте посочили в скобите му.
  • Прави абсолютно същото като get() метод.
navigate().refresh()

Примерна употреба:

  • Няма нужда от параметри.
  • Опреснява текущата страница.
навигация().назад()

Примерна употреба:

  • Няма нужда от параметри
  • Връща ви с една страница назад в хронологията на браузъра.
навигация().напред()

Примерна употреба:

  • Няма нужда от параметри
  • Отвежда ви напред с една страница в хронологията на браузъра.

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

близо()

Примерна употреба:

  • Няма нужда от параметри
  • Той затваря само прозореца на браузъра, който WebDriver контролира в момента.
откажат от ()

Примерна употреба:

  • Няма нужда от параметри
  • Затваря всички прозорци, които WebDriver е отворил.

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

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

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

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

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

Но ако използвате quit(), всички прозорци ще бъдат затворени – не само родителският. Опитайте да стартирате кода по-долу и ще забележите, че двата изскачащи прозореца по-горе също ще бъдат затворени автоматично.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Превключване между рамки

За да осъществим достъп до GUI елементи във Frame, първо трябва да насочим WebDriver да се фокусира върху рамката или изскачащия прозорец, преди да имаме достъп до елементи в тях. Да вземем например уеб страницата https://demo.guru99.com/selenium/deprecated.html

Превключване между рамки

Тази страница има 3 рамки, чиито атрибути „име“ са посочени по-горе. Искаме да получим достъп до връзката „Отхвърлено“, оградена по-горе в жълто. За да направим това, първо трябва да инструктираме WebDriver да превключи към рамката „classFrame“, използвайки „switchTo().frame()“ метод. Ще използваме атрибута name на рамката като параметър за частта „frame()“.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

След като изпълните този код, ще видите, че рамката „classFrame“ е отведена на страницата „Отхвърлен API“, което означава, че нашият код успешно успя да получи достъп до връзката „Отхвърлен“.

Превключване между изскачащи прозорци Windows

WebDriver позволява показването на изскачащи прозорци като предупреждения, за разлика от Selenium IDE. За достъп до елементите в предупреждението (като съобщението, което съдържа), трябва да използваме "switchTo().alert()" метод. В кода по-долу ще използваме този метод за достъп до полето за предупреждение и след това ще извлечем съобщението му с помощта на "getText()" и след това автоматично затворете предупредителното поле с помощта на "switchTo().alert().accept()" метод.

Първо се насочете към https://output.jsbin.com/usidix/1 и щракнете ръчно върху „Напред!“ бутон там и вижте сами текста на съобщението.

Превключване между изскачащи прозорци Windows

Да видим Selenium примерен код за това-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

От Eclipse конзола, забележете, че отпечатаното предупредително съобщение е:

Превключване между изскачащи прозорци Windows

коледари

Има два вида чакане.

  1. Неявно изчакване – използва се за задаване на времето за изчакване по подразбиране в цялата програма
  2. Изрично изчакване – използва се за задаване на времето за изчакване само за конкретен случай

Неявно изчакайте

  • По-лесно е да се кодира от Explicit Waits.
  • Обикновено се декларира в инстанциращата част на кода.
  • Ще ви трябва само един допълнителен пакет за импортиране.

За да започнете да използвате имплицитно изчакване, ще трябва да импортирате този пакет във вашия код.

Неявно изчакайте

След това в частта за инстанциране на вашия код добавете това.

Неявно изчакайте

Изрично изчакайте

Изричните изчаквания се извършват с помощта на класовете WebDriverWait и ExpectedCondition. За следното Selenium Пример за WebDriver, ще изчакаме до 10 секунди, за да стане видим елемент, чийто идентификатор е „потребителско име“, преди да продължим към следващата команда. Ето стъпките.

Стъпка 1:

Импортирайте тези два пакета:

Изрично изчакайте

Стъпка 2:

Декларирайте променлива WebDriverWait. В този пример ще използваме „myWaitVar“ като име на променливата.

Изрично изчакайте

Стъпка 3:

Използвайте myWaitVar с ExpectedConditions на части, където трябва да се появи изрично изчакване. В този случай ще използваме изрично изчакване на „потребителското име“ (Mercury Tours HomePage) въвеждане, преди да напишем текста „урок“ върху него.

Изрично изчакайте

Условия

Следните методи се използват в условни и looping операции —

  • isEnabled() се използва, когато искате да проверите дали даден елемент е активиран или не, преди да изпълните команда.

Условия isEnabled()

  • isDisplayed() се използва, когато искате да проверите дали определен елемент се показва или не, преди да изпълните команда.

Условия isDisplayed()

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

Условия isSelected()

Използване на ExpectedConditions

Класът ExpectedConditions предлага по-широк набор от условия, които можете да използвате заедно с метода until() на WebDriverWait.

По-долу са някои от най-често срещаните методи на ExpectedConditions.

  • alertIsPresent() – изчаква, докато се покаже поле за предупреждение.

Използване на ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Изчаква, докато даден елемент стане видим и в същото време активиран. Пробата Selenium Code по-долу ще изчака, докато елементът с id=”username” стане видим и активиран, преди да присвои този елемент като променлива WebElement с име „txtUserName”.

Използване на ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() – Изчаква дадения кадър да е вече наличен и след това автоматично превключва към него.

Използване на ExpectedConditions elementToBeClickable()

Улавяне на изключения

Когато използвате isEnabled(), isDisplayed() и isSelected(), WebDriver приема, че елементът вече съществува на страницата. В противен случай ще хвърли a NoSuchElementException. За да избегнем това, трябва да използваме блок try-catch, така че програмата да не бъде прекъсната.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Ако използвате изрично изчакване, типът изключение, което трябва да хванете, е „TimeoutException“.

Улавяне на изключения

Въпроси и Отговори

Инсталирайте JDK, IDE, като например Eclipse или IntelliJ, Selenium Java библиотеки и съответстващия драйвер на браузъра. Създавайте инструменти за автоматизация като Maven или Gradle опростяване на управлението на зависимостите.

Изкуственият интелект автоматично поправя локатори, генерира тестови случаи от потребителски истории и идентифицира нестабилни тестове. Платформи като Testim, Mabl и Applitools вграждат изкуствен интелект за по-интелигентно създаване, изпълнение и визуална валидация.

Да. GitHub Copilot, Cursor и JetBrains AI генерира Java Selenium скриптове от стъпки на разбираем език, включително чакания, твърдения и обекти на страници. Те значително намаляват шаблоните за нови тестови сценарии.

findElement връща първия съвпадащ WebElement или хвърля NoSuchElementException. findElements връща списък с всички съвпадения и връща празен списък, ако не са намерени никакви, като никога не хвърля изключението.

Thread.sleep спира за фиксирана продължителност, независимо от състоянието на страницата, забавяйки бързите изпълнения и отхвърляйки бавните. Използвайте WebDriverWait с ExpectedConditions, за да чакате само толкова дълго, колкото е необходимо.

Selenium поддържа ChromeDriver, GeckoDriver за Firefox, EdgeDriver, SafariDriver и IEDriverServer. Selenium Manager във версия 4 изтегля правилния драйвер автоматично.

Конфигурирайте опциите на Chrome или FirefoxОбект Options със setAcceptInsecureCerts(true). Това казва на браузъра да игнорира невалидните сертификати, за да може сесията на WebDriver да продължи.

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

Обобщете тази публикация с: