JavaScriptExecutor في Selenium مع المثال
ما هي تفاصيل JavaScriptExecutor؟
JavaScriptExecutor هي واجهة تساعد على التنفيذ Javaالنص من خلال Selenium برنامج تشغيل الويب. Javaيوفر ScriptExecutor طريقتين "executescript" و "executeAsyncScript" لتشغيل javascript على النافذة المحددة أو الصفحة الحالية.
لماذا نحتاج JavaScriptExecutor؟
In Selenium يتم استخدام Webdriver، والمحددات مثل XPath، وCSS، وما إلى ذلك لتحديد العمليات على صفحة الويب وإجراءها عليها.
في حالة عدم عمل محددات المواقع هذه، يمكنك استخدامها JavaScriptExecutor. يمكنك استخدام JavaScriptExecutor لإجراء عملية مطلوبة على عنصر الويب.
Selenium يدعم جافا سكريبت إكسيكتور. ليست هناك حاجة لمكون إضافي أو وظيفة إضافية. تحتاج فقط إلى الاستيراد (org.openqa.selenium.Javascriptالمنفذ) في البرنامج النصي للاستخدام JavaScriptExecutor.
Javaطرق ScriptExecutor في 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);
مثال على النقر فوق عنصر باستخدام Javaسكريإكسيكتور في Selenium
بالنسبة لـexecuteScript، سنرى ثلاثة أمثلة مختلفة واحدًا تلو الآخر.
1) مثال: انقر فوق زر لتسجيل الدخول وإنشاء نافذة التنبيه باستخدام JavaScriptExecutor.
في هذا السيناريو، سوف نستخدم الموقع التجريبي “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');");
}
}
الإخراج: عندما يتم تنفيذ التعليمات البرمجية بنجاح. سوف تلاحظ
- انقر بنجاح على زر تسجيل الدخول و
- سيتم عرض نافذة التنبيه (انظر الصورة أدناه).
2) مثال: التقاط البيانات والانتقال إلى صفحات مختلفة باستخدام JavaScriptExecutor.
قم بتنفيذ البرنامج النصي 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/'");
}
}
الإخراج: عندما يتم تنفيذ الكود أعلاه بنجاح، فسوف يقوم بجلب تفاصيل الموقع والانتقال إلى صفحة مختلفة كما هو موضح أدناه.
[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) مثال: قم بالتمرير لأسفل باستخدام 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 بكسل (انظر الصورة أدناه).
مثال على executeAsyncScript في Selenium
يساعد استخدام executeAsyncScript على تحسين أداء الاختبار الخاص بك. فهو يسمح بكتابة الاختبار بشكل يشبه الترميز العادي.
إكسكSync يمنع المزيد من الإجراءات التي يتم تنفيذها بواسطة Selenium المتصفح ولكن execAsync لا يمنع الإجراء. سيرسل استدعاءً إلى جانب الخادم الاختبار جناح بمجرد الانتهاء من البرنامج النصي. وهذا يعني أن كل شيء داخل البرنامج النصي سيتم تنفيذه بواسطة المتصفح وليس الخادم.
مثال 1: تنفيذ وضع السكون في المتصفح قيد الاختبار.
في هذا السيناريو، سنستخدم موقع العرض التوضيحي "Guru99" لتوضيح executeAsyncScript. في هذا المثال، ستتعلم
- قم بتشغيل المتصفح.
- افتح الموقع https://demo.guru99.com/V4/.
- ينتظر التطبيق لمدة 5 ثواني للقيام بإجراء آخر.
الخطوة 1) قم بالتقاط وقت البدء قبل الانتظار لمدة 5 ثوانٍ (5000 مللي ثانية) باستخدام طريقة executeAsyncScript().
الخطوة 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
===============================================
ملخص
Javaيتم استخدام ScriptExecutor عندما Selenium فشل Webdriver في النقر على أي عنصر بسبب بعض المشاكل.
- Javaيوفر ScriptExecutor طريقتين "executescript" و"executeAsyncScript" للتعامل معها.
- تم تنفيذ Javaاستخدام البرنامج النصي Selenium برنامج تشغيل الويب.
- يوضح كيفية النقر على عنصر من خلال JavaScriptExecutor، إذا فشل Selenium في النقر فوق العنصر بسبب بعض المشكلات.
- تم إنشاء نافذة "التنبيه" باستخدام JavaScriptExecutor.
- انتقل إلى صفحة مختلفة باستخدام JavaScriptExecutor.
- انتقل إلى أسفل النافذة باستخدام JavaScriptExecutor.
- تم جلب عنوان URL والعنوان واسم المجال باستخدام JavaScriptExecutor.






