JavaScriptExecutor ใน Selenium พร้อมตัวอย่าง
ความหมายของ JavaScriptExecutor?
JavaScriptExecutor เป็นอินเทอร์เฟซที่ช่วยในการดำเนินการ Javaสคริปต์ผ่าน Selenium เว็บไดรเวอร์ JavaScriptExecutor มีสองวิธีคือ “executescript” และ “executeAsyncScript” เพื่อเรียกใช้ javascript บนหน้าต่างที่เลือกหรือหน้าปัจจุบัน
ทำไมเราถึงต้องการ JavaScriptExecutor?
In Selenium Webdriver ตัวระบุตำแหน่งเช่น XPath, CSS ฯลฯ ใช้ในการระบุและดำเนินการกับหน้าเว็บ
ในกรณีที่ตัวระบุตำแหน่งเหล่านี้ใช้งานไม่ได้คุณสามารถใช้ได้ JavaScriptExecutor คุณสามารถใช้ JavaScriptExecutor เพื่อดำเนินการตามที่ต้องการบนองค์ประกอบบนเว็บ
Selenium รองรับ javaScriptExecutor ไม่จำเป็นต้องมีปลั๊กอินหรือส่วนเสริมเพิ่มเติม คุณเพียงแค่ต้องนำเข้า (org.openqa.selenium องค์กร OpenqaJavascriptผู้ปฏิบัติการ) ในสคริปต์ว่าจะใช้ Javaสคริปต์Executor
Javaวิธีการ ScriptExecutor ใน Selenium
รันสคริปต์
วิธีการนี้ดำเนินการ Javaต้นฉบับ ในบริบทของเฟรมหรือหน้าต่างที่เลือกในปัจจุบัน Selenium- สคริปต์ที่ใช้ในวิธีนี้ทำงานในเนื้อความของฟังก์ชันที่ไม่ระบุชื่อ (ฟังก์ชันที่ไม่มีชื่อ) นอกจากนี้เรายังสามารถส่งข้อโต้แย้งที่ซับซ้อนไปให้ได้ด้วย
สคริปต์สามารถคืนค่าได้ ประเภทข้อมูลที่ส่งคืนคือ
- บูลีน
- นาน
- เชือก
- รายการ
- Webองค์ประกอบ
Javascriptไวยากรณ์ของผู้บริหาร:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- ต้นฉบับ - นี้เป็น Javaสคริปต์ที่ต้องดำเนินการ
- ข้อโต้แย้ง – มันเป็นข้อโต้แย้งของสคริปต์ มันเป็นทางเลือก
ดำเนินการ AsyncScript
ด้วยสคริปต์แบบอะซิงโครนัส เพจของคุณจะแสดงผลได้เร็วขึ้น แทนที่จะบังคับให้ผู้ใช้รอให้สคริปต์ดาวน์โหลดก่อนที่เพจจะแสดงผล ฟังก์ชันนี้จะดำเนินการส่วนอะซิงโครนัส Javaสคริปต์ในบริบทของเฟรมหรือหน้าต่างที่เลือกในปัจจุบัน SeleniumJS ที่ดำเนินการดังกล่าวจะเป็นแบบเธรดเดียวโดยมีฟังก์ชันคอลแบ็กหลายแบบที่ทำงานแบบซิงโครนัส
วิธีใช้ JavaScriptExecutor ใน Selenium
นี่คือกระบวนการทีละขั้นตอนเกี่ยวกับวิธีการใช้งาน JavaScriptExecutor ใน Selenium:
ขั้นตอน 1) นำเข้าแพ็คเกจ
import org.openqa.selenium.JavascriptExecutor;
ขั้นตอน 2) สร้างข้อมูลอ้างอิง
JavascriptExecutor js = (JavascriptExecutor) driver;
ขั้นตอน 3) โทร Javascriptวิธีการดำเนินการ
js.executeScript(script, args);
ตัวอย่างของการคลิกองค์ประกอบโดยใช้ JavaScriptExecutor ใน Selenium
สำหรับExecuteScript เราจะเห็นสามตัวอย่างที่แตกต่างกันทีละตัวอย่าง
1) ตัวอย่าง: คลิกปุ่มเพื่อเข้าสู่ระบบและสร้างหน้าต่างแจ้งเตือนโดยใช้ Javaสคริปต์Executor
ในสถานการณ์นี้ เราจะใช้ไซต์สาธิต “Guru99” เพื่อแสดงตัวอย่าง JavaScriptExecutor ในตัวอย่างนี้
- เปิดเว็บเบราว์เซอร์
- เปิดเว็บไซต์ https://demo.guru99.com/V4/ และ
- เข้าสู่ระบบด้วยข้อมูลประจำตัว
- แสดงหน้าต่างแจ้งเตือนเมื่อเข้าสู่ระบบสำเร็จ
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');");
}
}
Output: เมื่อรันโค้ดสำเร็จ คุณจะสังเกต
- คลิกที่ปุ่มเข้าสู่ระบบสำเร็จและ
- หน้าต่างการแจ้งเตือนจะปรากฏขึ้น (ดูภาพด้านล่าง)
2) ตัวอย่าง: บันทึกข้อมูลขูดและนำทางไปยังหน้าต่างๆ โดยใช้ Javaสคริปต์Executor
ดำเนินการสคริปต์ selenium ด้านล่าง ในตัวอย่างนี้
- เปิดตัวเว็บไซต์
- ดึงรายละเอียดของไซต์ เช่น 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/'");
}
}
Output: เมื่อดำเนินการโค้ดด้านบนสำเร็จแล้ว ระบบจะดึงรายละเอียดของไซต์และนำทางไปยังหน้าอื่นดังแสดงด้านล่าง
[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
===============================================
3) ตัวอย่าง: เลื่อนลงโดยใช้ Javaสคริปต์Executor
ดำเนินการสคริปต์ 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 พิกเซล (ดูภาพด้านล่าง)
ตัวอย่างของ executeAsyncScript ใน Selenium
การใช้ executeAsyncScript จะช่วยปรับปรุงประสิทธิภาพการทดสอบของคุณ ทำให้สามารถเขียนการทดสอบได้เหมือนการเขียนโค้ดปกติ
ผู้บริหารSync บล็อกการดำเนินการเพิ่มเติมที่ดำเนินการโดย Selenium เบราว์เซอร์แต่ execAsync ไม่บล็อกการดำเนินการ มันจะส่งการโทรกลับไปยังฝั่งเซิร์ฟเวอร์ การทดสอบ ชุดเมื่อสคริปต์เสร็จสิ้น หมายความว่าทุกอย่างภายในสคริปต์จะถูกดำเนินการโดยเบราว์เซอร์ ไม่ใช่เซิร์ฟเวอร์
ตัวอย่างที่ 1: การดำเนินการสลีปในเบราว์เซอร์ที่กำลังทดสอบ
ในสถานการณ์จำลองนี้ เราจะใช้ไซต์สาธิต “Guru99” เพื่อแสดงตัวอย่างการดำเนินการ AsyncScript ในตัวอย่างนี้ คุณจะ
- เปิดเบราว์เซอร์
- เปิดเว็บไซต์ https://demo.guru99.com/V4/.
- แอปพลิเคชันรอเป็นเวลา 5 วินาทีเพื่อดำเนินการต่อไป
ขั้นตอน 1) จับเวลาเริ่มต้นก่อนที่จะรอ 5 วินาที (5000 มิลลิวินาที) โดยใช้เมธอด implementAsyncScript()
ขั้นตอน 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));
}
}
Output: แสดงเวลาที่ผ่านไปมากกว่า 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สคริปต์Executor
- นำทางไปยังหน้าต่างๆโดยใช้ Javaสคริปต์Executor
- เลื่อนหน้าต่างลงมาโดยใช้ Javaสคริปต์Executor
- ดึงข้อมูล URL ชื่อ และชื่อโดเมนโดยใช้ Javaสคริปต์Executor






