JavaScriptExecutor에서 Selenium 웹드라이버(예시)

⚡ 스마트 요약

JavaScriptExecutor에서 Selenium WebDriver가 실행됩니다 Java로케이터가 부족할 경우 브라우저 내부에서 실행되는 스크립트입니다. Less이 섹션에서는 executeScript, executeAsyncScript, 스크롤, 클릭, 알림 및 폼 입력 예제를 다룹니다.

  • ⚙️ 극한을 구합니다: 숨겨진 요소를 우회합니다. Java스크립트가 많이 포함된 페이지.
  • 🧩 두 가지 방법: executeScript는 동기적으로 실행되고, executeAsyncScript는 콜백을 통해 비동기적으로 처리합니다.
  • 📜 스크롤: 창을 스크롤하거나, 특정 좌표로 이동하거나, 특정 요소를 화면에 표시하도록 스크롤할 수 있습니다.
  • 🖱️ 숨겨진 클릭: WebDriver가 접근할 수 없는 요소에 대해 click() 함수를 실행합니다.
  • 📝 폼 컨트롤: 까다로운 요소에서 값을 주입하고 텍스트를 읽습니다.
  • 🤖 AI 스니펫: AI 도구가 생성합니다 JavaScriptExecutor 코드를 수정하고 불안정한 선택자를 고칩니다.

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

실행스크립트

이 메소드는 실행됩니다 JavaScript 현재 선택된 프레임이나 창의 컨텍스트에서 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: 테스트 중인 브라우저에서 절전 모드를 수행합니다.

이 시나리오에서는 “을 사용하겠습니다.GuruexecuteAsyncScript를 설명하기 위한 99인치 데모 사이트입니다. 이 예제에서는 다음을 수행합니다.

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

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

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

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

단계 4) 서브tract (현재 시간 – 시작 시간) = 경과 시간.

단계 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		
===============================================

자주 묻는 질문

숨겨진 요소, 스크롤 또는 WebDriver가 노출하지 않는 DOM 접근과 같은 이유로 로케이터가 실패하는 경우입니다.

네. Copilot은 코드 조각을 생성하고, 스크롤 패턴을 제안하며, 불안정한 테스트를 리팩토링합니다.

예. Testim Mabl 자동 치유 선택기를 추가하고 Java스크립트 대체 기능.

executeScript는 동기식으로 실행됩니다. executeAsyncScript는 비동기 코드의 경우 콜백을 통해 완료됩니다.

js.executeScript(“arguments[0].scrollIntoView(true);”, element)를 호출합니다.

WebDriver 명령이 실패하거나 DOM 조작이 필요한 경우에만 사용하십시오.

아니요. 트리거되기 전에 window.alert를 재정의할 수 있습니다. 네이티브 다이얼로그에는 Alert API를 사용하세요.

executeScript 결과를 형변환합니다. 예: String t = (String) js.executeScript(“return document.title;”);.

이 게시물을 요약하면 다음과 같습니다.