JavaScriptExecutor в Selenium WebDriver с пример

Съдържание:

Anonim

Какво е JavaScriptExecutor?

JavaScriptExecutor е интерфейс, който помага за изпълнението на JavaScript чрез Selenium Webdriver. JavaScriptExecutor предоставя два метода "executescript" & "executeAsyncScript" за стартиране на javascript на избрания прозорец или текущата страница.

В този урок ще научите -

  • Какво е JavaScriptExecutor?
  • Защо се нуждаем от JavaScriptExecutor?
  • Методи за изпълнение на JavaScript
  • Пример за executeAsyncScript
    • Пример 1: Извършване на сън в тествания браузър.
  • Пример за executeScript
    • 1) Пример: Щракнете върху бутон, за да влезете и да генерирате прозорец за предупреждение
    • 2) Пример: Снимайте данни за изстъргване и навигирайте до различни страници
    • 3) Пример: Превъртане надолу с използване

Защо се нуждаем от JavaScriptExecutor?

В Selenium Webdriver локатори като XPath, CSS и др. Се използват за идентифициране и извършване на операции на уеб страница.

В случай, че тези локатори не работят, можете да използвате JavaScriptExecutor. Можете да използвате JavaScriptExecutor, за да извършите желана операция върху уеб елемент.

Selenium поддържа javaScriptExecutor. Няма нужда от допълнителен плъгин или добавка. Трябва само да импортирате ( org.openqa.selenium.JavascriptExecutor ) в скрипта, за да използвате JavaScriptExecutor.

Методи за изпълнение на JavaScript

  1. executeAsyncScript

С асинхронен скрипт страницата ви се изобразява по-бързо. Вместо да принуждавате потребителите да чакат скрипта да се изтегли, преди страницата да се изобрази. Тази функция ще изпълни асинхронна част от JavaScript в контекста на текущо избраната рамка или прозорец в Selenium. Така изпълненият JS е еднонишко с различна функция за обратно извикване, която работи синхронно.

  1. executeScript

Този метод изпълнява JavaScript в контекста на текущо избраната рамка или прозорец в Selenium. Скриптът, използван в този метод, се изпълнява в тялото на анонимна функция (функция без име). Можем да му предадем и сложни аргументи.

Скриптът може да върне стойности. Върнатите типове данни са

  • Булево
  • Дълго
  • Струна
  • Списък
  • WebElement.

Основният синтаксис за JavascriptExecutor е даден по-долу:

Синтаксис:

JavascriptExecutor js = (JavascriptExecutor) драйвер;js.executeScript (скрипт, аргументи);
  • Скрипт - Това е JavaScript, който трябва да се изпълни.
  • Аргументи - Това са аргументите на скрипта. Не е задължително.

Пример за executeAsyncScript

Използването на executeAsyncScript помага за подобряване на ефективността на вашия тест. Тя позволява тест за писане по-скоро като нормално кодиране.

ExecSync блокира допълнителни действия, извършвани от браузъра Selenium, но execAsync не блокира действията. След като скриптът приключи, той ще изпрати обратно извикване към сървърния пакет за тестване. Това означава, че всичко вътре в скрипта ще се изпълнява от браузъра, а не от сървъра.

Пример 1: Извършване на сън в тествания браузър.

В този сценарий ще използваме демонстрационен сайт "Guru99", за да илюстрираме executeAsyncScript. В този пример ще го направите

  • Стартирайте браузъра.
  • Отворете сайта „http://demo.guru99.com/V4/“.
  • Приложението чака 5 секунди, за да извърши допълнително действие.

Стъпка 1) Заснемете стартовото време, преди да изчакате 5 секунди (5000 милисекунди), като използвате метода executeAsyncScript ().

Стъпка 2) След това използвайте executeAsyncScript (), за да изчакате 5 секунди.

Стъпка 3) След това вземете текущото време.

Стъпка 4) Изваждане (текущо време - начален час) = преминало време.

Стъпка 5) Проверете изхода, който трябва да показва повече от 5000 милисекунди

импортиране на java.util.concurrent.TimeUnit;импортиране на org.openqa.selenium.JavascriptExecutor;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;внос org.testng.annotations.Test;публичен клас JavaSE_Test {@Тестпублична невалидност Вход (){Драйвер за WebDriver = нов FirefoxDriver ();// Създаване на интерфейсния обект на JavascriptExecutor чрез леене на типJavascriptExecutor js = (JavascriptExecutor) драйвер;// Стартиране на сайта.driver.get ("http://demo.guru99.com/V4/");// Максимизиране на прозорецdriver.manage (). window (). maximize ();// Задайте Script Timeout на 20 секундиdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Декларирайте и задайте началния часlong start_time = System.currentTimeMillis ();// Извикайте метода executeAsyncScript (), за да изчакате 5 секундиjs.executeAsyncScript ("window.setTimeout (аргументи [аргументи.дължина - 1], 5000);");// Вземете разликата (currentTime - startTime) в пъти.System.out.println ("Преминало време: + (System.currentTimeMillis () - start_time));}}

Изход: Успешно показва изминалото време повече от 5 секунди (5000 милисекунди), както е показано по-долу:

[TestNG] Изпълнение:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: ПРЕДУПРЕЖДЕНИЕ Не могат да бъдат намерени приложения за регистратора (org.apache.http.client.protocol.RequestAddCookies).log4j: ПРЕДУПРЕЖДЕНИЕ Моля, инициализирайте системата log4j правилно.log4j: ПРЕДУПРЕЖДЕНИЕ Вижте http://logging.apache.org/log4j/1.2/faq.html#noconfig за повече информация.Изминало време: 5022МИНАЛ: Вход===================================================Тест по подразбиранеИзпълнени тестове: 1, неуспехи: 0, пропуски: 0===================================================

Пример за executeScript

За executeScript ще видим три различни примера един по един.

1) Пример: Щракнете върху бутон, за да влезете и да генерирате прозорец за предупреждение с помощта на JavaScriptExecutor.

В този сценарий ще използваме демонстрационен сайт "Guru99", за да илюстрираме JavaScriptExecutor. В този пример

  • Стартирайте уеб браузъра
  • отворете сайта "http://demo.guru99.com/V4/" и
  • вход с идентификационни данни
  • Показване на прозорец за предупреждение при успешно влизане.
внос org.openqa.selenium.By;импортиране на org.openqa.selenium.JavascriptExecutor;импортиране на org.openqa.selenium.WebDriver;внос org.openqa.selenium.WebElement;импортиране на org.openqa.selenium.firefox.FirefoxDriver;внос org.testng.annotations.Test;публичен клас JavaSE_Test {@Тестпублична невалидност Вход (){Драйвер за WebDriver = нов FirefoxDriver ();// Създаване на интерфейсния обект на JavascriptExecutor чрез леене на типJavascriptExecutor js = (JavascriptExecutor) драйвер;// Стартиране на сайта.driver.get ("http://demo.guru99.com/V4/");Бутон WebElement = driver.findElement (By.name ("btnLogin"));// Влезте в Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("парола")). sendKeys ("amUpenu");// Извършване Щракнете върху бутона ВХОД с помощта на JavascriptExecutorjs.executeScript ("аргументи [0] .click ();", бутон);// За генериране на прозорец за предупреждение с помощта на JavascriptExecutor. Показване на предупредителното съобщениеjs.executeScript ("alert ('Добре дошли в Guru99');");}}

Изход: Когато кодът се изпълни успешно. Ще наблюдавате

  • Успешно щракване върху бутона за вход и
  • Ще се покаже прозорец за предупреждение (вижте изображението по-долу).

2) Пример: Заснемете данни за изстъргване и отидете до различни страници с помощта на JavaScriptExecutor.

Изпълнете долния скрипт за селен. В този пример

  • Стартирайте сайта
  • Вземете подробности за сайта, като URL адрес на сайта, име на заглавие и име на домейн на сайта.
  • След това отидете на друга страница.
импортиране на org.openqa.selenium.JavascriptExecutor;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;внос org.testng.annotations.Test;публичен клас JavaSE_Test {@Тестпублична невалидност Вход (){Драйвер за WebDriver = нов FirefoxDriver ();// Създаване на интерфейсния обект на JavascriptExecutor чрез леене на типJavascriptExecutor js = (JavascriptExecutor) драйвер;// Стартиране на сайта.driver.get ("http://demo.guru99.com/V4/");// Извличане на домейн името на сайта. Tostring () променя обекта на име.Низ DomainName = js.executeScript ("връщане на document.domain;"). ToString ();System.out.println ("Име на домейн на сайта =" + DomainName);// Извличане на URL адреса на сайта. Tostring () променя обекта на имеString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL адрес на сайта =" + url);// Метод document.title извлича името на заглавието на сайта. Tostring () променя обекта на имеНиз TitleName = js.executeScript ("върнете document.title;"). ToString ();System.out.println ("Заглавие на страницата =" + Име на заглавието);// Придвижване до нова страница, т.е. за генериране на страница за достъп. (стартиране на нов url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Резултат: Когато горният код се изпълни успешно, той ще извлече подробностите за сайта и ще премине към друга страница, както е показано по-долу.

[TestNG] Изпълнение:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: ПРЕДУПРЕЖДЕНИЕ Не могат да бъдат намерени приложения за регистратора (org.apache.http.client.protocol.RequestAddCookies).log4j: ПРЕДУПРЕЖДЕНИЕ Моля, инициализирайте системата log4j правилно.log4j: ПРЕДУПРЕЖДЕНИЕ Вижте http://logging.apache.org/log4j/1.2/faq.html#noconfig за повече информация.Име на домейн на сайта = demo.guru99.comURL адрес на сайта = http://demo.guru99.com/V4/Заглавие на страницата = Начална страница на банка Guru99МИНАЛ: Вход===================================================Тест по подразбиранеИзпълнени тестове: 1, неуспехи: 0, пропуски: 0=================================================== 

3) Пример: Превъртете надолу, използвайки JavaScriptExecutor.

Изпълнете долния скрипт за селен. В този пример

  • Стартирайте сайта
  • Превъртете надолу с 600 пиксела
импортиране на org.openqa.selenium.JavascriptExecutor;импортиране на org.openqa.selenium.WebDriver;импортиране на org.openqa.selenium.firefox.FirefoxDriver;внос org.testng.annotations.Test;публичен клас JavaSE_Test {@Тестпублична невалидност Вход (){Драйвер за WebDriver = нов FirefoxDriver ();// Създаване на интерфейсния обект на JavascriptExecutor чрез леене на типJavascriptExecutor js = (JavascriptExecutor) драйвер;// Стартиране на сайта.driver.get ("http://moneyboats.com/");// Максимизиране на прозорецdriver.manage (). window (). maximize ();// Вертикално превъртане надолу с 600 пикселаjs.executeScript ("window.scrollBy (0,600)");}}

Изход : Когато се изпълни горният код, той ще се превърти надолу с 600 пиксела (вижте изображението по-долу).

Резюме:

JavaScriptExecutor се използва, когато Selenium Webdriver не успее да щракне върху който и да е елемент поради някакъв проблем.

  • JavaScriptExecutor предоставя два метода "executescript" & "executeAsyncScript" за обработка.
  • Изпълниха JavaScript с помощта на Selenium Webdriver.
  • Илюстрирано как да щракнете върху елемент чрез JavaScriptExecutor, ако селен не успее да щракне върху елемент поради някакъв проблем.
  • Генерира прозореца „Alert“ с помощта на JavaScriptExecutor.
  • Придвижен до различната страница с помощта на JavaScriptExecutor.
  • Превъртете надолу през прозореца с помощта на JavaScriptExecutor.
  • Извлечен URL, заглавие и име на домейн с помощта на JavaScriptExecutor.