JavaScriptExecutor في Selenium مع المثال

ما هي تفاصيل JavaScriptExecutor؟

JavaScriptExecutor هي واجهة تساعد على التنفيذ Javaالنص من خلال Selenium برنامج تشغيل الويب. Javaيوفر ScriptExecutor طريقتين "executescript" و "executeAsyncScript" لتشغيل javascript على النافذة المحددة أو الصفحة الحالية.

JavaScriptExecutor

لماذا نحتاج 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. في هذا المثال،

انقر فوق زر لتسجيل الدخول وإنشاء نافذة تنبيه باستخدام 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');");   
    		
    }		
}

الإخراج: عندما يتم تنفيذ التعليمات البرمجية بنجاح. سوف تلاحظ

  • انقر بنجاح على زر تسجيل الدخول و
  • سيتم عرض نافذة التنبيه (انظر الصورة أدناه).

انقر فوق زر لتسجيل الدخول وإنشاء نافذة تنبيه باستخدام JavaScriptExecutor

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/'");			
    }		
}

الإخراج: عندما يتم تنفيذ الكود أعلاه بنجاح، فسوف يقوم بجلب تفاصيل الموقع والانتقال إلى صفحة مختلفة كما هو موضح أدناه.

التقط بيانات كشط وانتقل إلى صفحات مختلفة باستخدام 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

مثال على executeAsyncScript في Selenium

يساعد استخدام executeAsyncScript على تحسين أداء الاختبار الخاص بك. فهو يسمح بكتابة الاختبار بشكل يشبه الترميز العادي.

إكسكSync يمنع المزيد من الإجراءات التي يتم تنفيذها بواسطة Selenium المتصفح ولكن execAsync لا يمنع الإجراء. سيرسل استدعاءً إلى جانب الخادم الاختبار جناح بمجرد الانتهاء من البرنامج النصي. وهذا يعني أن كل شيء داخل البرنامج النصي سيتم تنفيذه بواسطة المتصفح وليس الخادم.

مثال 1: تنفيذ وضع السكون في المتصفح قيد الاختبار.

في هذا السيناريو، سنستخدم موقع العرض التوضيحي "Guru99" لتوضيح executeAsyncScript. في هذا المثال، ستتعلم

الخطوة 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.

تلخيص هذه التدوينة بـ: