JavaScriptExecutor في السيلينيوم مع مثال

ما هو JavaScriptExecutor؟

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

JavaScriptExecutor

لماذا نحتاج إلى JavaScriptExecutor؟

في Selenium Webdriver، يتم استخدام محددات المواقع مثل XPath وCSS وما إلى ذلك لتحديد العمليات وتنفيذها على صفحة الويب.

في حالة عدم عمل محددات المواقع هذه، يمكنك استخدام JavaScriptExecutor. يمكنك استخدام JavaScriptExecutor لتنفيذ العملية المطلوبة على عنصر الويب.

السيلينيوم يدعم javaScriptExecutor. ليست هناك حاجة لمكون إضافي أو وظيفة إضافية. تحتاج فقط إلى الاستيراد (org.openqa.selenium.JavascriptExecutor) في البرنامج النصي لاستخدام JavaScriptExecutor.

طرق JavaScriptExecutor في السيلينيوم

تنفيذ سكريبت

يتم تنفيذ هذه الطريقة جافا سكريبت في سياق الإطار أو النافذة المحددة حاليًا في السيلينيوم. يعمل البرنامج النصي المستخدم في هذه الطريقة في نص دالة مجهولة (دالة بدون اسم). يمكننا أيضًا تمرير حجج معقدة إليها.

يمكن للبرنامج النصي إرجاع القيم. أنواع البيانات التي تم إرجاعها هي

  • منطقية
  • طويل
  • خيط
  • قائمة
  • WebElement.

بناء جملة JavascriptExecutor:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • سيناريو - هذا هو جافا سكريبت الذي يجب تنفيذه.
  • الحجج - ومن الحجج للبرنامج النصي. إنه اختياري.

تنفيذ

باستخدام البرنامج النصي غير المتزامن، يتم عرض صفحتك بسرعة أكبر. بدلاً من إجبار المستخدمين على الانتظار حتى يتم تنزيل البرنامج النصي قبل عرض الصفحة. ستقوم هذه الوظيفة بتنفيذ جزء غير متزامن من JavaScript في سياق الإطار أو النافذة المحددة حاليًا في السيلينيوم. إن JS الذي يتم تنفيذه هو خيط واحد مع وظيفة رد اتصال مختلفة تعمل بشكل متزامن.

كيفية استخدام JavaScriptExecutor في السيلينيوم

فيما يلي عملية خطوة بخطوة حول كيفية استخدام JavaScriptExecutor في السيلينيوم:

الخطوة 1) قم باستيراد الحزمة.

import org.openqa.selenium.JavascriptExecutor;

الخطوة 2) إنشاء مرجع.

JavascriptExecutor js = (JavascriptExecutor) driver;

الخطوة 3) استدعاء أسلوب JavascriptExecutor.

js.executeScript(script, args);

مثال على النقر فوق عنصر باستخدام JavaScripExecutor في السيلينيوم

بالنسبة لـexecuteScript، سنرى ثلاثة أمثلة مختلفة واحدًا تلو الآخر.

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

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

  • قم بتشغيل متصفح الويب
  • افتح الموقع https://demo.guru99.com/V4/ و
  • تسجيل الدخول بأوراق اعتماد

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

قم بتنفيذ البرنامج النصي السيلينيوم أدناه. في هذا المثال،

  • إطلاق الموقع
  • جلب ديtails للموقع مثل عنوان 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/'");			
    }		
}

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

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

قم بتنفيذ البرنامج النصي السيلينيوم أدناه. في هذا المثال،

  • إطلاق الموقع
  • قم بالتمرير لأسفل بمقدار 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

مثال على تنفيذ AsyncScript في السيلينيوم

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

يحظر execSync الإجراءات الإضافية التي يتم تنفيذها بواسطة متصفح 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		
===============================================

نبذة عامة

يتم استخدام JavaScriptExecutor عندما يفشل Selenium Webdriver في النقر على أي عنصر بسبب بعض المشكلات.

  • يوفر JavaScriptExecutor طريقتين "executescript" و"executeAsyncScript" للتعامل معها.
  • تم تنفيذ JavaScript باستخدام Selenium Webdriver.
  • تم توضيح كيفية النقر على عنصر من خلال JavaScriptExecutor، إذا فشل السيلينيوم في النقر على العنصر بسبب بعض المشكلات.
  • تم إنشاء نافذة "التنبيه" باستخدام JavaScriptExecutor.
  • انتقل إلى صفحة مختلفة باستخدام JavaScriptExecutor.
  • قم بالتمرير لأسفل النافذة باستخدام JavaScriptExecutor.
  • تم جلب عنوان URL والعنوان واسم المجال باستخدام JavaScriptExecutor.