JavaScriptExecutor σε Selenium με Παράδειγμα
Τι είναι JavaScriptExecutor;
JavaΤο ScriptExecutor είναι μια διεπαφή που βοηθά στην εκτέλεση JavaΔιαγραφή σεναρίου Selenium Webdriver. JavaΤο ScriptExecutor παρέχει δύο μεθόδους "executescript" και "executeAsyncScript" για την εκτέλεση της javascript στο επιλεγμένο παράθυρο ή την τρέχουσα σελίδα.
Γιατί χρειαζόμαστε JavaScriptExecutor;
In Selenium Το πρόγραμμα οδήγησης Web, οι εντοπιστές όπως το XPath, το CSS κ.λπ. χρησιμοποιούνται για τον εντοπισμό και την εκτέλεση λειτουργιών σε μια ιστοσελίδα.
Σε περίπτωση που αυτοί οι εντοπιστές δεν λειτουργούν, μπορείτε να χρησιμοποιήσετε JavaScriptExecutor. Μπορείτε να χρησιμοποιήσετε JavaScriptExecutor για να εκτελέσετε μια επιθυμητή λειτουργία σε ένα στοιχείο web.
Selenium υποστηρίζει javaScriptExecutor. Δεν υπάρχει ανάγκη για επιπλέον πρόσθετο ή πρόσθετο. Απλά πρέπει να κάνετε εισαγωγή (org.openqa.σελήνιο.JavascriptΕκτελεστής διαθήκης) στο σενάριο ως προς χρήση JavaScriptExecutor.
JavaΜέθοδοι ScriptExecutor σε Selenium
executeScript
Αυτή η μέθοδος εκτελείται JavaΓραφή στο πλαίσιο του τρέχοντος επιλεγμένου πλαισίου ή παραθύρου Selenium. Το σενάριο που χρησιμοποιείται σε αυτήν τη μέθοδο εκτελείται στο σώμα μιας ανώνυμης συνάρτησης (μια συνάρτηση χωρίς όνομα). Μπορούμε επίσης να του περάσουμε περίπλοκα επιχειρήματα.
Το σενάριο μπορεί να επιστρέψει τιμές. Οι τύποι δεδομένων που επιστρέφονται είναι
- Boolean
- Μακριά
- Σπάγγος
- Λιστα
- WebElement.
JavascriptΣύνταξη εκτελεστή:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Γραφή - Αυτό είναι το JavaΣενάριο που πρέπει να εκτελεστεί.
- Επιχειρήματα – Είναι τα επιχειρήματα στο σενάριο. Είναι προαιρετικό.
executeAsyncScript
Με το Asynchronous script, η σελίδα σας αποδίδεται πιο γρήγορα. Αντί να αναγκάζετε τους χρήστες να περιμένουν τη λήψη ενός σεναρίου πριν από την απόδοση της σελίδας. Αυτή η συνάρτηση θα εκτελέσει ένα ασύγχρονο κομμάτι του JavaΣενάριο στο πλαίσιο του τρέχοντος επιλεγμένου πλαισίου ή παραθύρου Selenium. Το JS που εκτελείται με αυτόν τον τρόπο είναι μονού νήματος με μια διαφορετική συνάρτηση επανάκλησης που εκτελείται συγχρονισμένα.
Πώς να το χρησιμοποιήσετε: JavaScriptExecutor σε Selenium
Ακολουθεί μια διαδικασία βήμα προς βήμα για τον τρόπο χρήσης JavaScriptExecutor σε Selenium:
Βήμα 1) Εισαγάγετε το πακέτο.
import org.openqa.selenium.JavascriptExecutor;
Βήμα 2) Δημιουργήστε μια αναφορά.
JavascriptExecutor js = (JavascriptExecutor) driver;
Βήμα 3) Τηλεφώνησε στο JavascriptΜέθοδος εκτελεστής.
js.executeScript(script, args);
Παράδειγμα κλικ σε ένα στοιχείο χρησιμοποιώντας JavaScripExecutor σε 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) Παράδειγμα: Λήψη δεδομένων Scrape και πλοήγηση σε διαφορετικές σελίδες χρησιμοποιώντας JavaScriptExecutor.
Εκτελέστε το παρακάτω σενάριο σεληνίου. Σε αυτό το παράδειγμα,
- Ξεκινήστε τον ιστότοπο
- Λάβετε τις λεπτομέρειες του ιστότοπου, όπως το 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.
Εκτελέστε το παρακάτω σενάριο σεληνίου. Σε αυτό το παράδειγμα,
- Ξεκινήστε τον ιστότοπο
- Κάντε κύλιση προς τα κάτω κατά 600 pixel
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 pixel (δείτε την παρακάτω εικόνα).
Παράδειγμα executeAsyncScript in 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 Το πρόγραμμα οδήγησης Web αποτυγχάνει να κάνει κλικ σε οποιοδήποτε στοιχείο λόγω κάποιου προβλήματος.
- JavaΤο ScriptExecutor παρέχει δύο μεθόδους "executescript" και "executeAsyncScript" για χειρισμό.
- Εκτέλεσε το JavaΧρήση σεναρίου Selenium Webdriver.
- Απεικονίζεται πώς να κάνετε κλικ σε ένα στοιχείο μέσω JavaScriptExecutor, εάν το σελήνιο δεν κάνει κλικ στο στοιχείο λόγω κάποιου προβλήματος.
- Δημιουργήθηκε το παράθυρο "Ειδοποίηση" χρησιμοποιώντας JavaScriptExecutor.
- Πλοηγήθηκε στη διαφορετική σελίδα χρησιμοποιώντας JavaScriptExecutor.
- Κάντε κύλιση προς τα κάτω στο παράθυρο χρησιμοποιώντας JavaScriptExecutor.
- Λήφθηκε διεύθυνση URL, τίτλος και όνομα τομέα χρησιμοποιώντας JavaScriptExecutor.