JavaScriptExecutor Selenium 예와 함께

JavaScriptExecutor란 무엇입니까?

JavaScriptExecutor는 JavaScript 실행을 도와주는 인터페이스입니다. Selenium 웹드라이버. JavaScriptExecutor는 "executescript"와 "executeA"라는 두 가지 메서드를 제공합니다.sync스크립트”를 선택하면 선택한 창이나 현재 페이지에 자바스크립트가 실행됩니다.

자바스크립트 실행기

왜 JavaScriptExecutor가 필요한가요?

In Selenium Webdriver, XPath, CSS 등과 같은 로케이터를 사용하여 식별하고 수행합니다. opera웹 페이지의 내용.

이러한 로케이터가 작동하지 않는 경우 JavaScriptExecutor를 사용할 수 있습니다. JavaScriptExecutor를 사용하여 원하는 작업을 수행할 수 있습니다. opera웹 요소에 대한 설명입니다.

Selenium javaScriptExecutor를 지원합니다. 추가 플러그인이나 추가 기능이 필요하지 않습니다. 가져오기만 하면 됩니다(org.openqa.selenium.JavascriptExecutor) 스크립트에서 JavaScriptExecutor를 사용합니다.

JavaScriptExecutor 메소드 Selenium

실행스크립트

이 메소드는 실행됩니다 자바 스크립트 현재 선택된 프레임이나 창의 컨텍스트에서 Selenium. 이 메서드에 사용되는 스크립트는 익명 함수(이름이 없는 함수)의 본문에서 실행됩니다. 복잡한 인수를 전달할 수도 있습니다.

스크립트는 값을 반환할 수 있습니다. 반환된 데이터 유형은 다음과 같습니다.

  • 부울
  • 명부
  • WebElement.

JavascriptExecutor 구문:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • 스크립트 – 실행해야 하는 JavaScript입니다.
  • 인수 – 스크립트에 대한 인수입니다. 선택 사항입니다.

실행Async스크립트

A로synchronous 스크립트를 사용하면 페이지가 더 빠르게 렌더링됩니다. 페이지가 렌더링되기 전에 사용자가 스크립트가 다운로드될 때까지 기다리도록 강요하는 대신. 이 함수는 a를 실행합니다.sync현재 선택된 프레임이나 창의 맥락에서 JavaScript의 중요한 부분 Selenium. 이렇게 실행된 JS는 다음을 실행하는 다양한 콜백 함수를 사용하여 단일 스레드로 구성됩니다. sync솔직히.

JavaScriptExecutor를 사용하는 방법 Selenium

다음은 JavaScriptExecutor를 사용하는 방법에 대한 단계별 프로세스입니다. Selenium:

단계 1) 패키지를 가져옵니다.

import org.openqa.selenium.JavascriptExecutor;

단계 2) 참조를 생성합니다.

JavascriptExecutor js = (JavascriptExecutor) driver;

단계 3) JavascriptExecutor 메서드를 호출합니다.

js.executeScript(script, args);

JavaScripExecutor를 사용하여 요소를 클릭하는 예 Selenium

ExecutionScript의 경우 세 가지 다른 예를 하나씩 살펴보겠습니다.

1) 예: JavaScriptExecutor를 사용하여 로그인하고 경고 창을 생성하려면 버튼을 클릭하십시오.

이 시나리오에서는 "Guru99" 데모 사이트를 사용하여 JavaScriptExecutor를 설명합니다. 이 예에서는

JavaScriptExecutor를 사용하여 로그인하고 경고 창을 생성하려면 버튼을 클릭하십시오.

  • 로그인 성공 시 경고창을 표시합니다.
import org.openqa.selenium.By;		
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.WebElement;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				


    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
        		
        WebElement button =driver.findElement(By.name("btnLogin"));			
        		
        //Login to Guru99 		
        driver.findElement(By.name("uid")).sendKeys("mngr34926");					
        driver.findElement(By.name("password")).sendKeys("amUpenu");					
        		
        //Perform Click on LOGIN button using JavascriptExecutor		
        js.executeScript("arguments[0].click();", button);
                                
        //To generate Alert window using JavascriptExecutor. Display the alert message 			
        js.executeScript("alert('Welcome to Guru99');");   
    		
    }		
}

출력: 코드가 성공적으로 실행되었을 때. 당신은 관찰할 것이다

  • 로그인 버튼을 성공적으로 클릭하면
  • 경고 창이 표시됩니다yed (아래 이미지 참조).

JavaScriptExecutor를 사용하여 로그인하고 경고 창을 생성하려면 버튼을 클릭하십시오.

2) 예: 스크랩 데이터를 캡처하고 JavaScriptExecutor를 사용하여 다른 페이지로 이동합니다.

아래를 실행 selenium 스크립트. 이 예에서는

  • 사이트를 시작하십시오
  • 드를 가져오세요tails 사이트의 URL, 사이트의 제목 이름 및 도메인 이름과 같은 사이트의 이름입니다.
  • 그런 다음 다른 페이지로 이동합니다.
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");
			
        //Fetching the Domain Name of the site. Tostring() change object to name.		
        String DomainName = js.executeScript("return document.domain;").toString();			
        System.out.println("Domain name of the site = "+DomainName);					
          		
        //Fetching the URL of the site. Tostring() change object to name		
        String url = js.executeScript("return document.URL;").toString();			
        System.out.println("URL of the site = "+url);					
          		
       //Method document.title fetch the Title name of the site. Tostring() change object to name		
       String TitleName = js.executeScript("return document.title;").toString();			
       System.out.println("Title of the page = "+TitleName);					

        		
      //Navigate to new Page i.e to generate access page. (launch new url)		
      js.executeScript("window.location = 'https://demo.guru99.com/'");			
    }		
}

출력: 위의 코드가 성공적으로 실행되면 de를 가져옵니다.tails 사이트를 클릭하고 아래와 같이 다른 페이지로 이동합니다.

JavaScriptExecutor를 사용하여 스크랩 데이터를 캡처하고 다른 페이지로 이동

[TestNG] Running:		
  C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-467151014\testng-customsuite.xml		

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Domain name of the site = demo.guru99.com		
URL of the site = https://demo.guru99.com/V4/		
Title of the page = Guru99 Bank Home Page		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0
===============================================

JavaScriptExecutor를 사용하여 스크랩 데이터를 캡처하고 다른 페이지로 이동

3) 예: JavaScriptExecutor를 사용하여 아래로 스크롤합니다.

아래를 실행 selenium 스크립트. 이 예에서는

  • 사이트를 시작하십시오
  • 600픽셀 아래로 스크롤
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("http://moneyboats.com/");			
     
        //Maximize window		
        driver.manage().window().maximize();		
        		
        //Vertical scroll down by 600  pixels		
        js.executeScript("window.scrollBy(0,600)");			
    }		
}

산출: 위 코드를 실행하면 600픽셀씩 아래로 스크롤됩니다(아래 이미지 참조).

JavaScriptExecutor를 사용하여 아래로 스크롤

ExecutionA의 예sync스크립트 입력 Selenium

ExecutionA 사용sync스크립트는 테스트 성능을 향상시키는 데 도움이 됩니다. 일반 코딩과 유사한 테스트 작성이 가능합니다.

간부Sync 다음에 의해 수행되는 추가 작업을 차단합니다. Selenium 브라우저는 있지만 execAsync 동작을 차단하지 않습니다. 서버 측에 콜백을 보냅니다. 지원 스크립트가 완료되면 제품군입니다. 이는 스크립트 내부의 모든 것이 서버가 아닌 브라우저에 의해 실행된다는 것을 의미합니다.

예 1: 테스트 중인 브라우저에서 절전 모드를 수행합니다.

이 시나리오에서는 "Guru99" 데모 사이트를 사용하여 ExecutionA를 설명합니다.sync스크립트. 이 예에서는

  • 브라우저를 실행합니다.
  • 열린 사이트 https://demo.guru99.com/V4/.
  • 애플리케이션은 추가 작업을 수행하기 위해 5초 동안 기다립니다.

단계 1) ExecuteA를 사용하여 5초(5000밀리초)를 기다리기 전 시작 시간을 캡처합니다.sync스크립트() 메서드.

단계 2) 그런 다음 ExecutionA를 사용하십시오.sync5초 동안 대기하는 스크립트()입니다.

단계 3) 그런 다음 현재 시간을 가져옵니다.

단계 4) (현재 시간 - 시작 시간) = 경과 시간을 뺍니다.

단계 5) 출력이 5000밀리초 이상 표시되는지 확인합니다.

import java.util.concurrent.TimeUnit;		

import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        		
        WebDriver driver= new FirefoxDriver();			

        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
     
          //Maximize window		
          driver.manage().window().maximize();		
        		
          //Set the Script Timeout to 20 seconds		
          driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS);			
             
          //Declare and set the start time		
          long start_time = System.currentTimeMillis();			
                   
          //Call executeAsyncScript() method to wait for 5 seconds		
          js.executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 5000);");			
          		
         //Get the difference (currentTime - startTime)  of times.		
         System.out.println("Passed time: " + (System.currentTimeMillis() - start_time));					
                    		
    }		
}			

출력: 성공적으로 표시됨yed 아래와 같이 5초(5000밀리초) 이상의 시간이 경과되었습니다.

[TestNG] Running:		
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-387352559\testng-customsuite.xml		
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Passed time: 5022		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0		
===============================================

요약

JavaScriptExecutor는 다음과 같은 경우에 사용됩니다. Selenium Webdriver가 일부 문제로 인해 요소를 클릭하지 못합니다.

  • JavaScriptExecutor는 "executescript"와 "executeA"라는 두 가지 메서드를 제공합니다.sync스크립트”를 처리합니다.
  • 다음을 사용하여 JavaScript를 실행했습니다. Selenium 웹드라이버.
  • JavaScriptExecutor를 통해 요소를 클릭하는 방법을 설명합니다. selenium 일부 문제로 인해 요소를 클릭하지 못합니다.
  • JavaScriptExecutor를 사용하여 '경고' 창을 생성했습니다.
  • JavaScriptExecutor를 사용하여 다른 페이지로 이동했습니다.
  • JavaScriptExecutor를 사용하여 창을 아래로 스크롤했습니다.
  • JavaScriptExecutor를 사용하여 URL, 제목, 도메인 이름을 가져왔습니다.