Използвайки Java класа "myclass", който създадохме в предишния урок, нека се опитаме да създадем скрипт WebDriver, който би:
- вземете началната страница на Mercury Tours
- проверете заглавието му
- разпечатайте резултата от сравнението
- затворете го, преди да приключите цялата програма.
Код на WebDriver
По-долу е действителният код на WebDriver за логиката, представена от сценария по-горе
Забележка: Стартирайки Firefox 35, трябва да използвате драйвер за гекон, създаден от Mozilla, за да използвате уеб драйвер. Selenium 3.0, gecko и firefox имат проблеми със съвместимостта и правилната им настройка може да се превърне в трудна задача. Ако кодът не работи, преминете към Firefox версия 47 или по-малка. Като алтернатива можете да стартирате вашите скриптове в Chrome. Селенът работи извън кутията за Chrome. Трябва само да промените 3 реда код, за да накарате скрипта си да работи с Chrome или Firefox
пакет новпроект;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;// коментирайте горния ред и коментирайте долния ред, за да използвате Chrome// импортиране на org.openqa.selenium.chrome.ChromeDriver;публичен клас PG1 {публична статична void main (String [] args) {// деклариране и инстанциране на обекти / променливиSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер за WebDriver = нов FirefoxDriver ();// коментирайте горните 2 реда и коментирайте под 2 реда, за да използвате Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// драйвер за WebDriver = нов ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String очакваноTitle = "Добре дошли: Mercury Tours";String actualTitle = "";// стартираме Fire fox и го насочваме към основния URL адресdriver.get (baseUrl);// получаваме действителната стойност на заглавиетоactualTitle = driver.getTitle ();/ ** сравнете действителното заглавие на страницата с очакваното и отпечатайте* резултатът е „Приет“ или „Неуспешен“* /if (actualTitle.contentEquals (очаква сеTitle)) {System.out.println („Тестът премина!“);} друго {System.out.println ("Тестът е неуспешен");}// затваряме Fire foxdriver.close ();}}
Обяснение на кода
Импортиране на пакети
За да започнете, трябва да импортирате следните два пакета:
- org.openqa.selenium. * - съдържа класа WebDriver, необходим за създаване на екземпляр на нов браузър, зареден със специфичен драйвер
- org.openqa.selenium.firefox.FirefoxDriver - съдържа клас FirefoxDriver, необходим за създаване на екземпляр на специфичен за Firefox драйвер в браузъра, създаден от класа WebDriver
Ако вашият тест се нуждае от по-сложни действия, като например достъп до друг клас, правене на екранни снимки на браузъра или манипулиране на външни файлове, определено ще трябва да импортирате повече пакети.
Инсталиране на обекти и променливи
Обикновено по този начин се създава екземпляр на обект на драйвер.
Клас FirefoxDriver без параметри означава, че профилът на Firefox по подразбиране ще бъде стартиран от нашата програма Java. Профилът на Firefox по подразбиране е подобен на стартирането на Firefox в безопасен режим (не се зареждат разширения).
За удобство запазихме базовия URL и очакваното заглавие като променливи.
Стартиране на сесия на браузъра
Методът get () на WebDriver се използва за стартиране на нова сесия на браузъра и го насочва към URL адреса, който сте посочили като негов параметър.
Вземете действителното заглавие на страницата
Класът WebDriver има метода getTitle () , който винаги се използва за получаване на заглавието на текущо заредената страница.
Сравнете очакваните и действителните стойности
Тази част от кода просто използва основна структура if-else на Java, за да сравнява действителното заглавие с очакваното.
Прекратяване на сесия на браузър
Методът " close () " се използва за затваряне на прозореца на браузъра.
Прекратяване на цялата програма
Ако използвате тази команда, без първо да затворите всички прозорци на браузъра, цялата ви програма на Java ще приключи, докато прозорецът на браузъра остане отворен.
Изпълнение на теста
Има два начина за изпълнение на код в Eclipse IDE.
- В лентата с менюта на Eclipse щракнете върху Run> Run.
- Натиснете Ctrl + F11, за да стартирате целия код.
Ако сте направили всичко правилно, Eclipse ще изведе "Test Passed!"
Намиране на GUI елементи
Намирането на елементи в WebDriver се извършва чрез метода " findElement (By. Locator ()) ". Частта "локатор" на кода е същата като която и да е от локаторите, обсъдени преди това в главите на IDE на Selenium в тези уроци. Всъщност препоръчваме ви да намерите GUI елементи с помощта на IDE и след като успешно идентифицирате да експортирате кода в WebDriver.
Ето примерния код на Selenium, който локализира елемент по неговия идентификатор. Facebook се използва като основен URL адрес.
пакет новпроект;внос org.openqa.selenium.By;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;публичен клас PG2 {публична статична void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер за WebDriver = нов FirefoxDriver ();String baseUrl = "http://www.facebook.com";StN tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("имейл")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}
Използвахме метода getTagName () , за да извлечем името на маркера на този конкретен елемент, чийто идентификатор е „имейл“. Когато се изпълнява, този код трябва да може правилно да идентифицира името на маркера „input“ и ще го отпечата в прозореца на конзолата на Eclipse.
Резюме за намиране на елементи
Вариация | Описание | Проба |
---|---|---|
От. className | намира елементи въз основа на стойността на атрибута "клас" | findElement (By.className ("someClassName")) |
От. cssSelector | намира елементи въз основа на основния двигател на CSS Selector на драйвера | findElement (By.cssSelector ("input # email")) |
От. документ за самоличност | локализира елементите по стойността на техния атрибут "id" | findElement (By.id ("someId")) |
От. linkText | намира елемент на връзка чрез точния текст, който показва | findElement (By.linkText ("РЕГИСТРАЦИЯ")) |
От. име | локализира елементи по стойността на атрибута "name" | findElement (By.name ("someName")) |
От. частиченLinkText | локализира елементи, които съдържат дадения текст на връзката | findElement (By.partialLinkText ("REG")) |
От. 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 () не поддържа функцията "съдържа" . Помислете за IDE кода на Selenium по-долу -
В Selenium IDE по-горе целият тест премина. Обаче в скрипта на Selenium WebDriver по-долу, същият тест генерира грешка, тъй като WebDriver не поддържа ключовата дума "contains", когато се използва в метода By.cssSelector ().
Общи команди
Инсталиране на уеб елементи
Вместо да използваме дългия синтаксис "driver.findElement (By.locator ())" всеки път, когато имате достъп до определен елемент, ние можем да създадем обект WebElement за него. Класът WebElement се съдържа в пакета "org.openqa.selenium. *".
Щракване върху елемент
Кликването е може би най-често срещаният начин за взаимодействие с уеб елементи . Методът click () се използва за симулиране на щракване върху който и да е елемент. Следващият пример за Selenium Java показва как click () е използван за щракване върху бутона "Вход" на Mercury Tours.
При използване на метода click () трябва да се отбележат следните неща.
- Не взема никакъв параметър / аргумент.
- Методът автоматично изчаква зареждане на нова страница, ако е приложимо.
- Елементът, върху който трябва да се щракне, трябва да бъде видим (височината и ширината не трябва да бъдат равни на нула).
Вземете команди
Получаване на команди извлича различна важна информация за страницата / елемента. Ето някои важни "get" команди, с които трябва да сте запознати.
Команди | Употреба |
---|---|
get () Примерно използване: |
|
getTitle () Примерно използване: |
|
getPageSource () Примерно използване: |
|
getCurrentUrl () Примерно използване: |
|
getText () Примерно използване: |
|
Навигирайте команди
Тези команди ви позволяват да опресните, да влезете и да превключвате между различни уеб страници.
navigate (). до () Примерна употреба: |
|
navigate (). refresh () Примерна употреба: |
|
navigate (). back () Примерна употреба: |
|
navigate (). forward () Примерна употреба: |
|
Затваряне и излизане от браузъра Windows
close () Примерна употреба: |
|
quit () Примерна употреба: |
|
За да илюстрирате ясно разликата между close () и quit (), опитайте да изпълните кода по-долу. Той използва уеб страница, която автоматично изскача прозорец при зареждане на страницата и отваря друга след излизане.
Забележете, че е затворен само прозорецът на родителския браузър, а не двата изскачащи прозореца.
Но ако използвате quit (), всички прозорци ще бъдат затворени - не само родителския. Опитайте да стартирате кода по-долу и ще забележите, че двете изскачащи прозорци по-горе също ще бъдат автоматично затворени.
пакет новпроект;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;публичен клас PG3 {публична статична void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер за WebDriver = нов FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // с помощта на QUIT всички прозорци ще се затворят}}
Превключване между кадри
За достъп до GUI елементи в рамка, първо трябва да насочим WebDriver да фокусира първо върху рамката или изскачащия прозорец, преди да имаме достъп до елементи в тях. Да вземем например уеб страницата http://demo.guru99.com/selenium/deprecated.html
Тази страница има 3 кадъра, чиито атрибути "name" са посочени по-горе. Искаме да осъществим достъп до връзката „Оттеглено“, обградена по-горе в жълто. За да направим това, първо трябва да инструктираме WebDriver да премине към рамката "classFrame", използвайки метода "switchTo (). Frame ()" . Ще използваме атрибута name на рамката като параметър за частта "frame ()".
пакет новпроект;внос org.openqa.selenium.By;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;публичен клас PG4 {публична статична void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер за WebDriver = нов FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Оттеглено")). click ();driver.close ();}}
След изпълнението на този код ще видите, че рамката "classFrame" се пренася на страницата "Оттеглено API", което означава, че нашият код е успял успешно да осъществи достъп до връзката "Оттеглено".
Превключване между изскачащи Windows
WebDriver позволява да се показват изскачащи прозорци като предупреждения, за разлика от IDE на Selenium. За да осъществим достъп до елементите в предупреждението (като съобщението, което съдържа), трябва да използваме метода "switchTo (). Alert ()" . В кода по-долу ще използваме този метод за достъп до полето за предупреждение и след това ще извлечем съобщението му с помощта на метода "getText ()" и след това автоматично ще затворим полето за предупреждение с помощта на "switchTo (). Alert (). Accept () " метод.
Първо отидете на http://jsbin.com/usidix/1 и щракнете ръчно върху "Go!" бутон там и вижте сами текста на съобщението.
Нека видим примерния код на Selenium, за да направим това -
пакет mypackage;внос org.openqa.selenium.By;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;публичен клас myclass {публична статична void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Драйвер за WebDriver = нов 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 забележете, че отпечатаното предупредително съобщение е:
Чака
Има два вида чакания.
- Имплицитно изчакване - използва се за задаване на времето за изчакване по подразбиране в цялата програма
- Изрично изчакване - използва се за задаване на времето за изчакване само за определен екземпляр
Неявно чакане
- Кодирането е по-лесно от Explicit Waits.
- Обикновено се декларира в инстанционната част на кода.
- Ще ви е необходим само един допълнителен пакет за импортиране.
За да започнете да използвате неявно изчакване, ще трябва да импортирате този пакет във вашия код.
След това добавете това в частта на екземпляра на вашия код.
Изрично изчакайте
Изричните изчаквания се извършват с помощта на класовете WebDriverWait и ExpectedCondition . За следващия пример на Selenium WebDriver ще изчакаме до 10 секунди, докато елемент, чийто идентификатор е "потребителско име", стане видим, преди да преминем към следващата команда. Ето стъпките.
Етап 1
Импортирайте тези два пакета:
Стъпка 2
Декларирайте променлива WebDriverWait. В този пример ще използваме "myWaitVar" като името на променливата.
Стъпка 3
Използвайте myWaitVar с ExpectedConditions на части, където се нуждаете от изрично изчакване. В този случай ще използваме изрично изчакване на въведеното "потребителско име" (Mercury Tours HomePage), преди да въведем текста "урок" върху него.
Условия
Следните методи се използват при условни операции и цикли -
- isEnabled () се използва, когато искате да проверите дали даден елемент е активиран или не, преди да изпълните команда.
- isDisplayed () се използва, когато искате да проверите дали даден елемент се показва или не, преди да изпълните команда.
- isSelected () се използва, когато искате да проверите дали е избрано определено квадратче за отметка, радио бутон или опция в падащото поле . Не работи върху други елементи.
Използване на ExpectedConditions
Класът ExpectedConditions предлага по-широк набор от условия, които можете да използвате заедно с метода до () на WebDriverWait.
По-долу са дадени някои от най-често срещаните методи ExpectedConditions.
- alertIsPresent () - изчаква, докато се покаже поле за предупреждение.
- elementToBeClickable () - Изчаква, докато елемент се види и в същото време е активиран. Примерният код на Selenium по-долу ще изчака, докато елементът стане първи видим и активиран, преди да присвои този елемент като променлива на WebElement с име "txtUserName".
- frameToBeAvailableAndSwitchToIt () - Изчаква, докато даденият кадър вече е наличен, и след това автоматично превключва към него.
Улавяне на изключения
Когато се използва isEnabled (), isDisplayed () и isSelected (), WebDriver приема, че елементът вече съществува на страницата. В противен случай ще хвърли NoSuchElementException . За да избегнем това, трябва да използваме блок try-catch, така че програмата да не бъде прекъсната.
WebElement txtbox_username = driver.findElement (By.id ("потребителско име"));опитвам{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("урок");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}
Ако използвате изрични изчаквания, видът на изключението, което трябва да уловите, е "TimeoutException".
Обобщение
- За да започнете да използвате WebDriver API, трябва да импортирате поне тези два пакета.
- org.openqa.selenium. *
- org.openqa.selenium.firefox.FirefoxDriver
- Методът get () е еквивалент на командата "open" на ID на Selenium.
- Намирането на елементи в WebDriver се извършва чрез метода findElement () .
- По-долу са наличните опции за намиране на елементи в WebDriver:
- От. className
- От. cssSelector
- От. документ за самоличност
- От. linkText
- От. име
- От. частиченLinkText
- От. tagName
- От. xpath
- By.cssSelector () не поддържа функцията "съдържа" .
- Можете да създадете екземпляр на елемент с помощта на класа WebElement .
- Кликването върху елемент се извършва с помощта на метода click () .
- WebDriver предоставя тези полезни команди за получаване :
- получи ()
- getTitle ()
- getPageSource ()
- getCurrentUrl ()
- getText ()
- WebDriver предоставя тези полезни навигационни команди
- навигация (). напред ()
- навигация (). назад ()
- навигация (). до ()
- navigate (). refresh ()
- Методите close () и quit () се използват за затваряне на прозорци на браузъра. Close () се използва за затваряне на един прозорец; докато quit () се използва за затваряне на всички прозорци, свързани с родителския прозорец, който обектът WebDriver контролира.
- Методите switchTo (). Frame () и switchTo (). Alert () се използват за насочване на фокуса на WebDriver съответно върху кадър или предупреждение.
- Неявните изчаквания се използват за задаване на времето за изчакване в цялата програма, докато изричните изчаквания се използват само за определени порции.
- Можете да използвате isEnabled (), isDisplayed (), isSelected () и комбинация от WebDriverWait и ExpectedConditions методи, когато проверявате състоянието на даден елемент. Те обаче не проверяват дали елементът не съществува.
- Когато е извикан isEnabled (), isDisplayed () или isSelected (), докато елементът не съществува, WebDriver ще изхвърли NoSuchElementException .
- Когато WebDriverWait и ExpectedConditions бяха извикани, докато елементът не съществува, WebDriver ще изхвърли TimeoutException .
Забележка:
driver.get (): Използва се за отиване до конкретния уебсайт, но не поддържа историята на браузъра и бисквитките, така че не можем да използваме бутона за напред и назад, ако щракнем върху него, страницата няма да получи график
driver.navigate (): използва се за отиване до конкретния уебсайт, но поддържа историята на браузъра и бисквитките, така че можем да използваме бутона напред и назад за навигация между страниците по време на кодирането на Testcase