В этом учебном пособии по Selenium JavaScriptExecutor мы узнаем следующее
Что такое JavaScript?
JavaScript – это язык программирования для взаимодействия с HTML DOM в браузере.
Что такое JavaScriptExecutor?
JavaScript executor — это интерфейс, предоставляемый Selenium, который предоставляет механизм для выполнения JavaScript через Selenium WebDriver.
Он предоставляет два метода, такие как «executeScript» и «executeAsyncScript», для запуска JavaScript в текущем выбранном фрейме, окне или странице.
Почему мы используем JavaScriptExecutor?
В Selenium WebDriver есть локаторы, такие как ID, Class, XPath и т. д., для работы с элементами на веб-странице.
Иногда эти локаторы Selenium по умолчанию могут не работать. На картинке появляется JavaScriptExecutor.
JavaScriptExecutor используется для выполнения операций на веб-странице.
Для использования JavaScriptExecutor в скриптах Selenium нет необходимости устанавливать надстройку или плагин.
Единственный шаг, который нам нужно сделать, это импортировать org.openqa.selenium.JavascriptExecutor в сценарий Selenium.
JavascriptExecutor в Selenium позволяет WebDriver взаимодействовать с HTML DOM. в браузере.
Иногда Selenium выдает неверные результаты из-за непредвиденных действий, происходящих при запуске скрипта. Скажем, есть всплывающее окно, когда мы открываем веб-сайт. Из-за этого Selenium не может найти конкретный элемент, который мы записали в скрипт, и выдает ошибку или неверный результат.
Например:
Как правило, мы нажимаем на элемент, используя метод click() в Selenium.
1 | driver.findElement(By.id(“Id Value”)).click(); |
Иногда веб-элементы управления плохо реагируют на команды Selenium, и мы можем столкнуться с проблемами с приведенным выше оператором « клик()». Как было сказано ранее, для выхода из такой ситуации мы используем интерфейс JavaScriptExecutor .
Нет необходимости писать отдельный скрипт для выполнения JavaScript. в браузере с помощью скрипта Selenium WebDriver. Просто используйте предопределенный интерфейс с именем ‘Java Script Executor'.
Нам нужно импортировать следующий пакет в скрипт.
Пакет:
1 | import org.openqa.selenium.JavascriptExecutor; |
Синтаксис:
12 | JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript(Script,Arguments); |
Script — JavaScript для выполнения
Аргументы – аргументы скрипта (необязательно). Может быть пустым.
Возвращает – один из логических, длинных, списка, строковых, списка, логических, веб-элементов или null.
Методы в JavaScriptExecutor
Методы JavaScriptExecutor следующие
- executeAsyncScript
- executeScript
#1. executeAsyncScript
Этот метод выполняет асинхронный фрагмент JavaScript в контексте текущего выбранного окна или фрейма в Selenium. Асинхронный скрипт быстро отображает вашу веб-страницу.
#2. executeScript
Этот метод выполняет JavaScript в контексте текущего выбранного окна или фрейма в Selenium.
Скрипт, который мы использовали в этом методе, выполняется в теле анонимной функции. Мы можем передавать ему сложные аргументы.
- Long
- List
- String
- Boolean
- WebElement
Как мы используем JavaScriptExecutor в Selenium
Давайте рассмотрим некоторые сценарии, которые мы могли бы обработать с помощью интерфейса JavaScriptExecutor:
Сценарий 1. Ввод текста в текстовое поле
Для ввода текста в Selenium WebDriver без использования метода sendKeys()
12 | js.executeScript(“document.getElementById('some id').value='someValue';”);js.executeScript( “document.getElementById('Email').value='SoftwareTestingMaterial.com';”); |
Сценарий № 2: Нажатие кнопки
Нажатие кнопки в Selenium WebDriver с помощью JavaScript
123 | js.executeScript(“document.getElementById('введите идентификатор вашего элемента').click();”);//orjs.executeScript(“arguments[0].click();”, loginButton); |
Сценарий №3: To Handle Checkbox
Мы передаем true или false для обработки флажка
1 | js.executeScript(“document.getElementById('введите идентификатор элемента').checked=false;” ); |
Сценарий №4: Создать всплывающее окно оповещения в селен
1 | js.executeScript(” alert('Добро пожаловать в SoftwareTestingMaterial');”); |
Сценарий №5: < сильный>Чтобы обновить окно браузера с помощью Javascript
1 | js.executeScript(“history.go(0)”); |
Сценарий №6: Получить внутренний текст всей веб-страницы в Selenium
12 | String sText = js.executeScript(“return document.documentElement.innerText;”).toString();System.out.println( sText); |
Сценарий №7: Чтобы получить заголовок наша веб-страница
12 | String sText = js.executeScript(“return document.title;”).toString();System.out.println(sText); |
Сценарий №8: Чтобы получить домен
12 | String sText = js.executeScript(“return document.domain;”).toString();System.out.println(sText); |
Сценарий №9. Получение URL-адреса веб-страницы< /h3>
12 | String sText = js.executeScript(“return document.URL;”).toString();System.out.println(sText) ; |
Сценарий №10: Выполнение прокрутки на приложение с использованием Selenium
См. также: Как прокручивать веб-страницу вниз или вверх с помощью Selenium WebDriver
1234 | //Вертикальная прокрутка – вниз на 500 пикселей js.executeScript(“window.scrollBy(0,500)”);//для прокрутки до конца страницы можно использовать такой код, как //js.executeScript(“window.scrollBy(0 ,document.body.scrollHeight)”); |
Сценарий №11: Чтобы щелкнуть подменю, которое видно только при наведении курсора мыши на меню
1 | js.executeScript(“$('ul.menus.menu-secondary.sf-js-enabled.sub-menu li').hover()”); |
Сценарий № 12. Чтобы перейти на другую страницу с помощью Javascript
1 | js.executeScript(“window.location = 'https://www.softwaretestingmaterial.com”); |
Сценарий №13: Найти скрытый элемент в селене с помощью JavaScriptExecutor
1 | js.executeScript(“arguments[0].click();”, element); |
< h2 id=h-1-практический-пример-исполнения-скрипта-использования-селена-javascriptexecutor>#1. Практический пример executeScript с использованием Selenium JavaScriptExecutor
Приведенная ниже программа поможет вам справиться с некоторыми сценариями, которые мы используем при написании сценариев. ;-o-tab-size:4;-webkit-tab-size:4;tab-size:4;размер шрифта:12px!важно;высота строки:15px!важно>пакет программного обеспечения TestingMaterial; импортировать 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; открытый класс JavaScriptExecutorClassDummy { статический драйвер WebDriver; @Test public static void javaScriptExeMethod(){ System.setProperty("webdriver.gecko.driver","D://Selenium Environment//Drivers//geckodriver.exe"); драйвер = новый FirefoxDriver(); driver.get("https://www.gmail.com"); WebElement loginButton = driver.findElement(By.xpath("//*[@id='следующий']")); /*Синтаксис: JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Сценарий,Аргументы); script — исполняемый код JavaScript. Аргументы — аргументы сценария. (Необязательно)*/JavascriptExecutor js = (JavascriptExecutor)driver; //Раскомментируйте каждый сценарий с помощью Ctrl + Shift + (обратная косая черта) и найдите решение *//для ввода текста в Selenium WebDriver без использования метода sendKeys() js.executeScript("document.getElementById(' некоторый идентификатор').value='someValue';"); js.executeScript("document.getElementById('Email').value='SoftwareTestingMaterial.com';");*//*//чтобы щелкнуть кнопка в Selenium WebDriver с использованием JavaScript //js.executeScript("arguments[0].click();", loginButton); //или js.executeScript("document.getElementById('введите идентификатор вашего элемента').click();"); js.executeScript("document.getElementById('следующий').click();");*//*//для обработки флажка js.executeScript("document .getElementById('введите идентификатор элемента').checked=false;");*//*//для создания всплывающего окна оповещения в селене js.executeScript("alert(&# 39;hello world');");*//*//для обновления окна браузера с помощью Javascript js.executeScript("history.go(0)");*//*//чтобы получить внутренний текст всей веб-страницы в Selenium String sText = js.executeScript("return document.documentElement.innerText;").toString(); System.out.println(sText);*//*//чтобы получить заголовок нашей веб-страницы String sText = js.executeScript("return document.title;").toString(); System.out.println(sText);*//*//для получения домена String sText = js.executeScript("return document.domain;").toString(); System.out.println(sText);*//*//чтобы получить URL-адрес нашей веб-страницы String sText = js.executeScript("return document.URL;").toString(); System.out.println(sText);*//*//для выполнения прокрутки в приложении с помощью Selenium //Вертикальная прокрутка — вниз на 50 пикселей js.executeScript("window.scrollBy(0,50)" ;); //для прокрутки до конца страницы мы можем использовать такой код, как //js.executeScript("window.scrollBy(0,document.body.scrollHeight)");*//* //щелкнуть подменю, которое видно только при наведении курсора мыши на меню? //Наведите указатель мыши на меню автоматизации на панели меню js.executeScript("$('ul.menus.menu-secondary.sf-js-enabled.sub-menu li').hover()& #34;);*//*//для перехода на другую страницу с помощью Javascript? //Переход на новую страницу js.executeScript("window.location = 'https://www.softwaretestingmaterial.com");*/} }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | пакет программного обеспечения TestingMaterial; импортировать 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; открытый класс JavaScriptExecutorClassDummy {статический драйвер WebDriver; @Testpublic static void javaScriptExeMethod() {System.setProperty (“webdriver.gecko.driver”, “D://Selenium Environment//Drivers//geckodriver.exe”); драйвер = новый FirefoxDriver ();driver.get(“https://www.gmail.com”);WebElement loginButton = driver.findElement(By.xpath(“//*[@id='next']”)) ;/*Синтаксис:JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);script — JavaScript для executeArguments — аргументы скрипта. (Необязательно)*/ JavascriptExecutor js = (JavascriptExecutor)driver; //Раскомментируйте каждый сценарий с помощью Ctrl + Shift + (обратная косая черта) и найдите решение *//для ввода текста в Selenium WebDriver без использования метода sendKeys() js.executeScript(“document.getElementById('some id').value ='какое-то значение';”); js.executeScript(“document.getElementById('Email').value='SoftwareTestingMaterial.com';”);*/ /*//чтобы нажать кнопку в Selenium WebDriver с помощью JavaScript //js.executeScript(“arguments&# 91;0].click();”, кнопка входа в систему); //или js.executeScript(“document.getElementById('введите идентификатор элемента').click();”); js.executeScript(“document.getElementById('next').click();”);*/ /*//для обработки флажка js.executeScript(“document.getElementById('введите идентификатор элемента').checked=false; “);*//*//для создания окна оповещения в seleniumjs.executeScript(“alert('hello world');”);*//*//для обновления окна браузера с помощью Javascriptjs.executeScript(“history.go (0)”);*//*//чтобы получить внутренний текст всей веб-страницы в SeleniumString sText = js.executeScript(“return document.documentElement.innerText;”).toString();System.out.println(sText) ;*/ /*//чтобы получить заголовок нашей веб-страницыString sText = js.executeScript(“return document.title;”).toString();System.out.println(sText);*//*//чтобы получить the domainString sText = js.executeScript(“return document.domain;”).toString();System.out.println(sText);*//*//чтобы получить URL-адрес нашей веб-страницыString sText = js.executeScript(” return document.URL;”).toString();System.out.println(sText);*//*//для выполнения прокрутки в приложении с помощью Selenium//Вертикальная прокрутка – вниз на 50 пикселей js.executeScript(“window.scrollBy(0,50)”);//для прокрутки до конца страницы мы можем использовать такой код, как //js.executeScript(“window.scrollBy(0,document.body .scrollHeight)”);*//* //чтобы щелкнуть подменю, которое видно только при наведении мыши на меню?//Наведите указатель мыши на меню автоматизации на панели меню js.executeScript(“$('ul.menus.menu- second.sf-js-enabled.sub-menu li').hover()”);*//*//для перехода на другую страницу с помощью Javascript? //Переход на новую страницу js.executeScript(“window.location = 'https://www.softwaretestingmaterial.com”);*/}} |
#2. Практический пример использования executeAsyncScript
executeAsyncScript быстрее отображает вашу веб-страницу. Используя executeAsyncScript, наш сценарий выполняется на стороне браузера, а не на стороне сервера, поскольку он отправляет обратный вызов набору тестов на стороне сервера, когда сценарий готов.
1234567891011121314151617181920212223 | пакет программного обеспечения TestingMaterial; импортировать java.util.concurrent.TimeUnit; импортировать 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; открытый класс JavaScriptExecutorClassDummy {@Testpublic void Login(){WebDriver driver= new FirefoxDriver();JavascriptExecutor js = (JavascriptExecutor)driver;//Для запуска sitedriver.get(“https://www.softwaretestingmaterial.com”);//Чтобы максимизировать windowdriver.manage().window().maximize();//Чтобы установить тайм-аут скрипта на 10 секундdriver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);//Чтобы объявить и установите время начала long startTime = System.currentTimeMillis();//Вызов метода executeAsyncScript() для ожидания в течение 10 секунд js.executeAsyncScript(“window.setTimeout(arguments[arguments.length – 1], 10000);”) ;//Для получения разницы текущего времени и времени запуска System.out.println(“Время ожидания: ” + (System.currentTimeMillis() – startTime));}} |
Не пропустите : Что нового в Selenium 4
Вывод:
Изучение того, как обращаться с JavaScriptExecutor в Selenium, обязательно для преодоления проблем, с которыми сталкивается Selenium WebDriver когда-то s при взаимодействии с веб-элементами.
TAG: qa