JavaScriptExecutor في Selenium برنامج تشغيل الويب (مثال)
⚡ ملخص ذكي
JavaScriptExecutor في Selenium يقوم WebDriver بتشغيل Javaيتم تنفيذ البرنامج النصي داخل المتصفح عندما تفشل محددات المواقع. Lessتغطي هذه المقالة أمثلة على تنفيذ البرامج النصية، وتنفيذ البرامج النصية غير المتزامنة، والتمرير، والنقر، والتنبيهات، وإدخال النماذج.

ما هي تفاصيل 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.
في هذا السيناريو سنستخدم "Guruموقع تجريبي بطول 99 بوصة للتوضيح 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: تنفيذ وضع السكون في المتصفح قيد الاختبار.
في هذا السيناريو سنستخدم "Guruموقع تجريبي بحجم 99 بوصة لتوضيح وظيفة executeAsyncScript. في هذا المثال، ستتعلم كيفية القيام بذلك.
- قم بتشغيل المتصفح.
- افتح الموقع https://demo.guru99.com/V4/.
- ينتظر التطبيق لمدة 5 ثواني للقيام بإجراء آخر.
الخطوة 1) قم بالتقاط وقت البدء قبل الانتظار لمدة 5 ثوانٍ (5000 مللي ثانية) باستخدام طريقة executeAsyncScript().
الخطوة 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 ===============================================






