implicit explicit wait selenium webdriver
Научете неявно и явно чакане в Selenium WebDriver:
В предишния урок се опитахме да ви запознаем с различните Цикли и условни операции на WebDriver . Тези условни методи често се занимават с почти всички видове опции за видимост на уеб елементи.
Продължавайки напред в това безплатна серийна тренировъчна серия , ще обсъдим различни видове чакания, предоставени от Selenium WebDriver . Ще обсъдим и за v различни видове навигационни опции наличен в WebDriver.
Waits помага на потребителя да отстранява проблеми, докато пренасочва към различни уеб страници, като опреснява цялата уеб страница и презарежда новата уеб елементи. Понякога може да има и обаждания от Ajax. По този начин може да се види забавяне във времето при презареждане на уеб страниците и отразяване на уеб елементите.
Потребителите често се намират при навигация през различни уеб страници напред и назад. По този начин, командите / методи navigate (), предоставени от WebDriver, помагат на потребителя да симулира сценарии в реално време, като се придвижва между уеб страниците с препратка към историята на уеб браузъра.
WebDriver снабдява потребителя с два генеза чакания, за да се справи с повтарящото се зареждане на страницата s, зареждане на уеб елементи, поява на прозорци, изскачащи прозорци и съобщения за грешки и отражение на уеб елементи на уеб страницата.
- Неявно чакане
- Изрично изчакайте
Нека обсъдим всеки от тях в детайли, имайки предвид практическия подход.
Какво ще научите:
- Неявно чакане на WebDriver
- Изрично изчакайте WebDriver
- Очаквано състояние
- Навигация с помощта на WebDriver
- Заключение
- Препоръчително четене
Неявно чакане на WebDriver
Неявните изчаквания се използват за осигуряване на време на изчакване по подразбиране (да речем 30 секунди) между всяка последователна тестова стъпка / команда в целия тестов скрипт. По този начин следващата тестова стъпка ще се изпълни само когато 30 секунди са изтекли след изпълнение на предишната тестова стъпка / команда.
Основни бележки
- Имплицитното изчакване е един ред на код и може да бъде декларирано в метода за настройка на тестовия скрипт.
- В сравнение с изричното чакане, неявното чакане е прозрачно и неусложнено. Синтаксисът и подходът са по-прости от изричното изчакване.
Тъй като е лесно и лесно за прилагане, имплицитното изчакване също създава няколко недостатъка. Това поражда времето за изпълнение на тестовия скрипт, тъй като всяка от командите ще престане да чака определено количество време, преди да възобнови изпълнението.
По този начин, за да отстрани този проблем, WebDriver въвежда явни изчаквания, където можем изрично да приложим изчаквания, когато възникне ситуацията, вместо да чакаме принудително, докато изпълняваме всяка от тестовите стъпки.
Изявления за внос
внос java.util.concurrent.TimeUnit - За да имаме достъп и прилагаме неявно изчакване в нашите тестови скриптове, ние сме длъжни да импортираме този пакет в нашия тестов скрипт.
Синтаксис
drv .manage (). timeouts (). implicitlyWait (10, TimeUnit. СЕКУНДИ );
Включете горния ред код в тестовия скрипт скоро след инстанцирането на променливата на инстанцията WebDriver. По този начин това е всичко, което е необходимо, за да зададете неявно изчакване в тестовия скрипт.
Упътване за кода
Имплицитното изчакване мандатира да предаде две стойности като параметри. Първият аргумент указва времето в числовите цифри, което системата трябва да изчака. Вторият аргумент показва скалата за измерване на времето. По този начин в горния код споменахме „30“ секунди като време за изчакване по подразбиране и единицата време е настроена на „секунди“.
Изрично изчакайте WebDriver
Изричните изчаквания се използват за спиране на изпълнението, докато не бъде изпълнено определено условие или не е изтекло максималното време. За разлика от неявните чакания, явните чакания се прилагат само за определен екземпляр.
WebDriver въвежда класове като WebDriverWait и ExpectedConditions за налагане на явни изчаквания в тестовите скриптове. В обхвата на тази дискусия ще използваме „gmail.com“ като образец.
Сценарий, който да бъде автоматизиран
- Стартирайте уеб браузъра и отворете „gmail.com“
- Въведете валидно потребителско име
- Въведете валидна парола
- Кликнете върху бутона за вход
- Изчакайте бутонът за съставяне да се вижда след зареждане на страницата
Код на WebDriver, използващ изрично изчакване
Моля, обърнете внимание, че за създаването на скриптове ще използваме проекта „Learning_Selenium”, създаден в предишните уроци.
Етап 1 : Създайте нов java клас, наречен „Wait_Demonstration” в рамките на проекта „Learning_Selenium”.
Стъпка 2 : Копирайте и поставете долния код в класа „Wait_Demonstration.java“.
По-долу е тестовият скрипт, който е еквивалентен на гореспоменатия сценарий.
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
Изявления за внос
- внос орг. openqa.selenium.support.ui.ExpectedConditions
- внос орг. openqa.selenium.support.ui.WebDriverWait
- Импортирайте горните пакети преди създаването на скрипта. Пакетите се отнасят до клас Select, който е необходим за обработка на падащото меню.
Инстантиране на обект за клас WebDriverWait
WebDriverWait wait = ново WebDriverWait ( drv , 30);
Създаваме референтна променлива „изчакайте“ за класа WebDriverWait и го създаваме чрез екземпляр на WebDriver и максимално време за изчакване за уволнение на изпълнението. Цитираното максимално време за изчакване се измерва в „секунди“.
Инстанцирането на WebDriver беше обсъдено в първоначалните уроци на WebDriver.
Очаквано състояние
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Горната команда изчаква да настъпи определен период от време или очаквано състояние, което настъпи или изтече първо.
По този начин, за да можем да направим това, използваме референтната променлива “wait” на класа WebDriverWait, създадена в предишната стъпка с клас ExpectedConditions и действително състояние, което се очаква да възникне. Следователно, веднага щом настъпи очакваното състояние, контролът на програмата ще премине към следващата стъпка на изпълнение, вместо принудително да изчака цели 30 секунди.
В нашия образец изчакваме бутонът „съставяне“ да присъства и да се зарежда като част от зареждането на началната страница и по този начин се придвижваме напред с извикване на командата за щракване върху бутона „съставяне“.
Видове очаквани условия
Класът ExpectedConditions предоставя голяма помощ за справяне със сценарии, при които трябва да установим за възникване на състояние, преди да изпълним действителната стъпка на теста.
Класът ExpectedConditions се предлага с широк спектър от очаквани условия, които могат да бъдат достъпни с помощта на референтната променлива WebDriverWait и до ().
Нека обсъдим надълго няколко от тях:
# 1) elementToBeClickable () - Очакваното условие изчаква даден елемент да може да се кликва, т.е. той трябва да присъства / показва / вижда на екрана, както и да е активиран.
Примерен код
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( “// div (съдържа (текст (),‘ СЪСТАВИ ’))” )));
# 2) textToBePresentInElement () - Очакваното условие чака елемент с определен модел на низ.
Примерен код
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( “// div (@ id =‘ ForgotPass '“),„ текст, който трябва да бъде намерен “ ));
свързан възел на списък c ++
# 3) alertIsPresent () - Очакваното състояние чака появяването на поле за предупреждение.
Примерен код
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - Очакваното състояние чака страница с конкретно заглавие.
Примерен код
wait.until (ExpectedConditions.titleIs ( „Gmail“ ));
# 5) frameToBeAvailableAndSwitchToIt () - Очакваното състояние изчаква рамка да бъде налична и след това, щом рамката е налична, контролът автоматично превключва към нея.
Примерен код
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (“ нов кадър ')));
Има много често действие на потребителя, когато потребителят щраква върху бутоните за назад и напред на уеб браузъра назад n напред, за да се придвижва до различните уеб страници, посетени в текущата сесия в историята на браузъра. По този начин, за да симулира такива действия, извършени от потребителите, WebDriver въвежда команди за навигация.
Нека разгледаме тези команди в детайли:
# 1) navigate (). Back ()
Тази команда позволява на потребителя да се придвижва до предишната уеб страница.
Примерен код:
driver.navigate (). back ();
Горната команда не изисква параметри и връща потребителя към предишната уеб страница в историята на уеб браузъра.
# 2) навигация (). Напред ()
Тази команда позволява на потребителя да се придвижва до следващата уеб страница с препратка към историята на браузъра.
Примерен код:
driver.navigate (). forward ();
Горната команда не изисква параметри и препраща потребителя към следващата уеб страница в историята на уеб браузъра.
# 3) navigate (). Refresh ()
Тази команда позволява на потребителя да опресни текущата уеб страница, като по този начин презареди всички уеб елементи.
Примерен код:
driver.navigate (). refresh ();
Горната команда не изисква параметри и презарежда уеб страницата.
# 4) навигация (). До ()
Тази команда позволява на потребителя да стартира нов прозорец на уеб браузъра и да навигира до посочения URL адрес.
Примерен код:
driver.navigate (). до („http://google.com”);
Горната команда изисква уеб параметър като параметър и след това отваря посочения URL адрес в прясно стартиран уеб браузър.
Заключение
В това Явно и изрично изчакване в урока на Selenium WebDriver , ние се опитахме да ви запознаем с чаканията на WebDriver. Обсъдихме и упражнихме както изричното, така и неявното чакане. В същото време обсъдихме и различните команди за навигация.
Ето основните неща на тази статия:
- WebDriver дава възможност на потребителя да избира измежду наличните изчаквания за справяне със ситуации, при които потокът на изпълнение може да изисква сън за няколко секунди, за да зареди уеб елементите или да отговори на конкретно условие. В WebDriver има два вида чакания.
- Неявно чакане
- Изрично изчакайте
- Неявно чакане се използват за осигуряване на време на изчакване по подразбиране между всяка последователна тестова стъпка / команда в целия тестов скрипт. По този начин следващата тестова стъпка ще се изпълни само когато определеното време е изтекло след изпълнение на предишната тестова стъпка / команда.
- Изрично чака се използват за спиране на изпълнението, докато не бъде изпълнено конкретно условие или не е изтекло максималното време. За разлика от неявните чакания, явните чакания се прилагат само за определен екземпляр.
- WebDriver въвежда класове като WebDriverWait и ExpectedConditions за налагане на явни изчаквания
- Очаквани условия class предоставя голяма помощ за справяне със сценарии, при които трябва да установим за възникване на състояние, преди да изпълним действителната стъпка на теста.
- Класът ExpectedConditions се предлага с широк спектър от очаквани условия, които могат да бъдат достъпни с помощта на референтната променлива WebDriverWait и до ().
- Навигирайте () методи / командите се използват за симулиране на поведението на потребителя, докато навигирате между различни уеб страници напред и назад.
Следващ урок # 16 : Продължавайки към следващия урок в списъка, ще запознаем потребителите с различни видове предупреждения, които могат да се появят при достъп до уебсайтове и подходите им за обработка в WebDriver. Видовете предупреждения, върху които бихме се съсредоточили, са основно - изскачащи прозорци за предупреждения, базирани на Windows и изскачащи прозорци, базирани на уеб. Тъй като знаем, че боравенето с изскачащи прозорци, базирани на прозорци, е извън възможностите на WebDriver, затова бихме използвали и някои помощни програми на трети страни за обработка на изскачащи прозорци.
Бележка за читателите : Дотогава читателите могат да автоматизират сценариите с различни зареждания на страници и динамични елементи, които се появяват на екрана, използвайки различните очаквани условия и команди за навигация.
Препоръчително четене
- Урок за краставици селен: Интеграция на краставица Java Selenium WebDriver
- Въведение в Selenium WebDriver - Урок № 8 за селен
- Внедряване на нашия първи скрипт за WebDriver - Урок № 10 за Selenium WebDriver
- Често задавани въпроси за селен
- Как да боравим със сигнали / изскачащи прозорци в Selenium WebDriver - Урок за селен # 16
- Ръководство за генериране на обширни отчети в Selenium WebDriver
- Как да стартирам Selenium WebDriver в различни популярни браузъри
- Цялата настройка и инсталиране на WebDriver с Eclipse - Урок № 9 за селен