JavaScriptExecutor에서 Selenium 예와 함께

Java스크립트 실행자?

JavaScriptExecutor는 실행을 돕는 인터페이스입니다. Java스크립트를 통해 Selenium 웹드라이버. JavaScriptExecutor는 선택된 창이나 현재 페이지에서 자바스크립트를 실행하기 위해 "executescript" 및 "executeAsyncScript"라는 두 가지 메서드를 제공합니다.

Java스크립트 실행기

왜 우리는 필요합니까? Java스크립트 실행자?

In Selenium 웹드라이버, XPath, CSS 등의 로케이터는 웹 페이지를 식별하고 작업을 수행하는 데 사용됩니다.

이 로케이터가 작동하지 않는 경우에는 다음을 사용할 수 있습니다. JavaScriptExecutor를 사용할 수 있습니다. JavaScriptExecutor는 웹 요소에서 원하는 작업을 수행합니다.

Selenium javaScriptExecutor를 지원합니다. 추가 플러그인이나 추가 기능이 필요하지 않습니다. 가져오기만 하면 됩니다(org.openqa.selenium.Javascript집행자) 스크립트에서 사용하는 방법 Java스크립트 실행자.

JavaScriptExecutor 메서드 Selenium

실행스크립트

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

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

  • 부울
  • 명부
  • WebElement.

Javascript실행자 구문:

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

비동기 스크립트 실행

비동기 스크립트를 사용하면 페이지가 더 빨리 렌더링됩니다. 사용자가 페이지가 렌더링되기 전에 스크립트가 다운로드될 때까지 기다리도록 하는 대신, 이 함수는 비동기적인 부분을 실행합니다. Java현재 선택된 프레임 또는 창의 컨텍스트에서 스크립트 Selenium이렇게 실행된 JS는 동기적으로 실행되는 다양한 콜백 함수를 갖춘 단일 스레드입니다.

이용 방법 JavaScriptExecutor에서 Selenium

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

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

import org.openqa.selenium.JavascriptExecutor;

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

JavascriptExecutor js = (JavascriptExecutor) driver;

단계 3) 전화 Javascript실행자 방법.

js.executeScript(script, args);

다음을 사용하여 요소를 클릭하는 예 JavaScripExecutor의 Selenium

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

1) 예: 버튼을 클릭하여 로그인하고 다음을 사용하여 경고 창을 생성합니다. Java스크립트 실행자.

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

다음을 사용하여 로그인하고 경고 창을 생성하려면 버튼을 클릭하십시오. Java스크립트 실행기

  • 로그인 성공 시 경고창을 표시합니다.
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');");   
    		
    }		
}

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

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

다음을 사용하여 로그인하고 경고 창을 생성하려면 버튼을 클릭하십시오. Java스크립트 실행기

2) 예: 스크랩 데이터를 캡처하고 다음을 사용하여 다른 페이지로 이동합니다. Java스크립트 실행자.

아래 셀레늄 스크립트를 실행합니다. 이 예에서,

  • 사이트를 시작하십시오
  • 사이트 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/'");			
    }		
}

출력: 위 코드가 성공적으로 실행되면 사이트의 세부정보를 가져오고 아래에 표시된 것처럼 다른 페이지로 이동합니다.

다음을 사용하여 스크랩 데이터를 캡처하고 다른 페이지로 이동합니다. Java스크립트 실행기

[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
===============================================

다음을 사용하여 스크랩 데이터를 캡처하고 다른 페이지로 이동합니다. Java스크립트 실행기

3) 예: 다음을 사용하여 아래로 스크롤 Java스크립트 실행자.

아래 셀레늄 스크립트를 실행합니다. 이 예에서,

  • 사이트를 시작하십시오
  • 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픽셀씩 아래로 스크롤됩니다(아래 이미지 참조).

다음을 사용하여 아래로 스크롤 Java스크립트 실행기

executeAsyncScript의 예 Selenium

executeAsyncScript를 사용하면 테스트 성능을 개선하는 데 도움이 됩니다. 테스트를 일반적인 코딩과 더 비슷하게 작성할 수 있습니다.

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

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

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

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

단계 1) executeAsyncScript() 메서드를 사용하여 5초(5000밀리초)를 기다리기 전의 시작 시간을 캡처합니다.

단계 2) 그런 다음 executeAsyncScript()를 사용하여 5초 동안 기다립니다.

단계 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));					
                    		
    }		
}			

출력: 아래와 같이 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" 및 "executeAsyncScript"를 제공합니다.
  • 실행한 Java스크립트를 사용 Selenium 웹드라이버.
  • 요소를 클릭하는 방법을 보여줍니다. JavaScriptExecutor는 Selenium이 어떤 문제로 인해 요소를 클릭하지 못하는 경우를 대비한 것입니다.
  • 다음을 사용하여 '경고' 창을 생성했습니다. Java스크립트 실행자.
  • 다음을 사용하여 다른 페이지로 이동했습니다. Java스크립트 실행자.
  • 다음을 사용하여 창을 아래로 스크롤했습니다. Java스크립트 실행자.
  • 다음을 사용하여 URL, 제목, 도메인 이름을 가져왔습니다. Java스크립트 실행자.

상세 보기 readmore