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

Selenium Java Пример

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

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

Selenium Примерен код на WebDriver

По-долу е действителният код на 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() метод за извличане на името на етикета на този конкретен елемент, чийто идентификатор е „имейл“. Когато се изпълни, този код трябва да може правилно да идентифицира името на етикета „вход“ и да го отпечата 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) въвеждане, преди да напишем текста „урок“ върху него.

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

Условия

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

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

Условия isEnabled()

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

Условия isDisplayed()

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

Условия isSelected()

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

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

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

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

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

  • elementToBeClickable() – Изчаква, докато даден елемент стане видим и в същото време активиран. Пробата Selenium Кодът по-долу ще изчака, докато елементът с 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“.

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

Oбобщение

  • За да започнете да използвате API на WebDriver, трябва да импортирате поне тези два пакета.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.Firefoxдрайвер
  • - get() метод е еквивалент на Selenium Команда „open“ на IDE.
  • Намирането на елементи в WebDriver се извършва с помощта на findElement() метод.
  • Следните са наличните опции за локализиране на елементи в WebDriver:
  • By.className
  • Чрез.cssSelector
  • By.id
  • By.linkText
  • По име
  • By.partialLinkText
  • By.tagName
  • По.xpath
  • By.cssSelector() не подкрепа на "съдържа" функция.
  • Можете да създадете екземпляр на елемент с помощта на класа WebElement.
  • Щракването върху елемент се извършва с помощта на click() метод.
  • WebDriver предоставя тези полезни команди за получаване:
  • получи ()
  • getTitle()
  • getPageSource()
  • getCurrentUrl()
  • getText()
  • WebDriver предоставя тези полезни команди за навигация
  • навигация().напред()
  • навигация().назад()
  • навигация().към()
  • navigate().refresh()
  • Методите close() и quit() се използват за затваряне на прозорците на браузъра. Close() използва се за затваряне на един прозорец; докато quit() се използва за затваряне на всички прозорци, свързани с родителския прозорец, който обектът WebDriver контролира.
  • - switchTo().frame() намлява switchTo().alert() методите се използват за насочване на фокуса на WebDriver съответно към рамка или предупреждение.
  • Implicit waits се използват за задаване на времето за изчакване през цялата програма, докато explicit waits се използват само на определени порции.
  • Можете да използвате isEnabled(), isDisplayed(),isSelected() и комбинация от WebDriverWait намлява Очаквани условия методи при проверка на състоянието на даден елемент. Те обаче не проверяват дали елементът не съществува.
  • Когато isEnabled(), isDisplayed() или isSelected() е извикан, докато елементът не съществува, WebDriver ще хвърли NoSuchElementException.
  • Когато методите WebDriverWait и ExpectedConditions бяха извикани, докато елементът не съществуваше, WebDriver хвърляше TimeoutException.

Забележка:

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

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