Τι είναι το JavaScriptExecutor;
Το JavaScriptExecutor είναι μια διεπαφή που βοηθά στην εκτέλεση JavaScript μέσω του Selenium Webdriver. Το JavaScriptExecutor παρέχει δύο μεθόδους "executescript" & "executeAsyncScript" για την εκτέλεση javascript στο επιλεγμένο παράθυρο ή στην τρέχουσα σελίδα.
Σε αυτό το σεμινάριο, θα μάθετε -
- Τι είναι το JavaScriptExecutor;
- Γιατί χρειαζόμαστε το JavaScriptExecutor;
- Μέθοδοι JavaScriptExecutor
- Παράδειγμα executeAsyncScript
- Παράδειγμα 1: Εκτέλεση αδράνειας στο πρόγραμμα περιήγησης υπό δοκιμή.
- Παράδειγμα executeScript
- 1) Παράδειγμα: Κάντε κλικ σε ένα κουμπί για είσοδο και δημιουργία παραθύρου ειδοποίησης
- 2) Παράδειγμα: Λήψη δεδομένων απόξεσης και πλοήγηση σε διαφορετικές σελίδες
- 3) Παράδειγμα: Κύλιση προς τα κάτω
Γιατί χρειαζόμαστε το JavaScriptExecutor;
Στο Selenium Webdriver, εντοπιστές όπως XPath, CSS κ.λπ. χρησιμοποιούνται για τον εντοπισμό και την εκτέλεση λειτουργιών σε μια ιστοσελίδα.
Σε περίπτωση που αυτοί οι εντοπιστές δεν λειτουργούν, μπορείτε να χρησιμοποιήσετε το JavaScriptExecutor. Μπορείτε να χρησιμοποιήσετε το JavaScriptExecutor για να εκτελέσετε μια επιθυμητή λειτουργία σε ένα στοιχείο ιστού.
Το Selenium υποστηρίζει javaScriptExecutor. Δεν υπάρχει ανάγκη για πρόσθετο πρόσθετο ή πρόσθετο. Απλώς πρέπει να εισαγάγετε ( org.openqa.selenium.JavascriptExecutor ) στο σενάριο για να χρησιμοποιήσετε το JavaScriptExecutor.
Μέθοδοι JavaScriptExecutor
- executeAsyncScript
Με το ασύγχρονο σενάριο, η σελίδα σας αποδίδεται πιο γρήγορα. Αντί να αναγκάζει τους χρήστες να περιμένουν για λήψη ενός σεναρίου πριν από την απόδοση της σελίδας. Αυτή η συνάρτηση θα εκτελέσει ένα ασύγχρονο κομμάτι JavaScript στο πλαίσιο του τρέχοντος επιλεγμένου πλαισίου ή παραθύρου στο Selenium. Το JS που εκτελείται είναι μονόστροφο με μια διαφορετική συνάρτηση επανάκλησης που λειτουργεί συγχρονισμένα.
- εκτελεστικό σενάριο
Αυτή η μέθοδος εκτελεί JavaScript στο πλαίσιο του τρέχοντος επιλεγμένου πλαισίου ή παραθύρου στο Σελήνιο. Το σενάριο που χρησιμοποιείται σε αυτήν τη μέθοδο εκτελείται στο σώμα μιας ανώνυμης συνάρτησης (μια συνάρτηση χωρίς όνομα). Μπορούμε επίσης να περάσουμε περίπλοκα επιχειρήματα σε αυτό.
Το σενάριο μπορεί να επιστρέψει τιμές. Οι τύποι δεδομένων που επιστρέφονται είναι
- Boolean
- Μακρύς
- Σειρά
- Λίστα
- Στοιχείο Web.
Η βασική σύνταξη για το JavascriptExecutor δίνεται παρακάτω:
Σύνταξη:
Πρόγραμμα οδήγησης JavascriptExecutor js = (JavascriptExecutor);js.executeScript (Σενάριο, Επιχειρήματα);
- Script - Αυτή είναι η JavaScript που πρέπει να εκτελεστεί.
- Επιχειρήματα - Είναι τα επιχειρήματα του σεναρίου. Είναι προαιρετικό.
Παράδειγμα executeAsyncScript
Η χρήση του executeAsyncScript, βοηθά στη βελτίωση της απόδοσης της δοκιμής σας. Επιτρέπει τη δοκιμή γραφής περισσότερο σαν μια κανονική κωδικοποίηση.
Το execSync αποκλείει περαιτέρω ενέργειες που εκτελούνται από το πρόγραμμα περιήγησης Selenium, αλλά το execAsync δεν αποκλείει τη δράση. Θα στείλει μια επιστροφή κλήσης στη σουίτα δοκιμών από τον διακομιστή μόλις ολοκληρωθεί το σενάριο. Αυτό σημαίνει ότι όλα μέσα στο σενάριο θα εκτελούνται από το πρόγραμμα περιήγησης και όχι από το διακομιστή.
Παράδειγμα 1: Εκτέλεση αδράνειας στο πρόγραμμα περιήγησης υπό δοκιμή.
Σε αυτό το σενάριο, θα χρησιμοποιήσουμε τον ιστότοπο επίδειξης "Guru99" για να απεικονίσουμε το executeAsyncScript. Σε αυτό το παράδειγμα, θα το κάνετε
- Εκκινήστε το πρόγραμμα περιήγησης.
- Ανοίξτε τον ιστότοπο "http://demo.guru99.com/V4/".
- Η εφαρμογή περιμένει 5 δευτερόλεπτα για να εκτελέσει μια περαιτέρω ενέργεια.
Βήμα 1) Καταγράψτε την ώρα έναρξης προτού περιμένετε 5 δευτερόλεπτα (5000 χιλιοστά του δευτερολέπτου) χρησιμοποιώντας τη μέθοδο executeAsyncScript ().
Βήμα 2) Στη συνέχεια, χρησιμοποιήστε το executeAsyncScript () για να περιμένετε 5 δευτερόλεπτα.
Βήμα 3) Στη συνέχεια, λάβετε την τρέχουσα ώρα.
Βήμα 4) Αφαίρεση (τρέχουσα ώρα - ώρα έναρξης) = χρόνος που πέρασε.
Βήμα 5) Επαληθεύστε την έξοδο που πρέπει να εμφανίζει περισσότερα από 5000 χιλιοστά του δευτερολέπτου
εισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.JavascriptExecutor;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Test;δημόσια τάξη JavaSE_Test {@Δοκιμήδημόσια άκυρη Είσοδος (){Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();// Δημιουργία αντικειμένου διασύνδεσης JavascriptExecutor με Type CastingΠρόγραμμα οδήγησης JavascriptExecutor js = (JavascriptExecutor);// Εκκίνηση του ιστότοπου.driver.get ("http://demo.guru99.com/V4/");// Μεγιστοποίηση παραθύρουdriver.manage (). window (). μεγιστοποίηση ();// Ρυθμίστε το Χρονικό όριο σεναρίου σε 20 δευτερόλεπταdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Δηλώστε και ορίστε την ώρα έναρξηςlong start_time = System.currentTimeMillis ();// Καλέστε τη μέθοδο executeAsyncScript () για να περιμένετε 5 δευτερόλεπταjs.executeAsyncScript ("window.setTimeout (επιχειρήματα [argumen.length - 1], 5000);");// Λάβετε τη διαφορά (currentTime - startTime) των χρόνων.System.out.println ("Ο χρόνος πέρασε: + (System.currentTimeMillis () - start_time));}}
Έξοδος: Εμφανίστηκε με επιτυχία ο χρόνος που πέρασε περισσότερο από 5 δευτερόλεπτα (5000 χιλιοστά του δευτερολέπτου) όπως φαίνεται παρακάτω:
[TestNG] Τρέξιμο:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customuite.xmllog4j: ΠΡΟΕΙΔΟΠΟΙΗΣΗ Δεν βρέθηκαν προσθήκες για το καταγραφικό (org.apache.http.client.protocol.RequestAddCookies)log4j: ΠΡΟΕΙΔΟΠΟΙΗΣΗ Παρακαλούμε αρχικοποιήστε σωστά το σύστημα log4j.log4j: WARN Δείτε http://logging.apache.org/log4j/1.2/faq.html#noconfig για περισσότερες πληροφορίες.Περασμένος χρόνος: 5022PASSED: Είσοδος===============================================Προεπιλεγμένη δοκιμήΟι δοκιμές εκτελούνται: 1, Αποτυχίες: 0, Παράλειψη: 0===============================================
Παράδειγμα executeScript
Για το executeScript, θα δούμε τρία διαφορετικά παραδείγματα ένα προς ένα.
1) Παράδειγμα: Κάντε κλικ σε ένα κουμπί για σύνδεση και δημιουργία παραθύρου ειδοποίησης χρησιμοποιώντας το JavaScriptExecutor.
Σε αυτό το σενάριο, θα χρησιμοποιήσουμε τον ιστότοπο επίδειξης "Guru99" για να δείξουμε το JavaScriptExecutor. Σε αυτό το παράδειγμα,
- Εκκινήστε το πρόγραμμα περιήγησης ιστού
- ανοίξτε τον ιστότοπο "http://demo.guru99.com/V4/" και
- συνδεθείτε με διαπιστευτήρια
- Εμφάνιση παραθύρου ειδοποίησης για επιτυχημένη σύνδεση.
εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.JavascriptExecutor;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Test;δημόσια τάξη JavaSE_Test {@Δοκιμήδημόσια άκυρη Είσοδος (){Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();// Δημιουργία αντικειμένου διασύνδεσης JavascriptExecutor με Type CastingΠρόγραμμα οδήγησης JavascriptExecutor js = (JavascriptExecutor);// Εκκίνηση του ιστότοπου.driver.get ("http://demo.guru99.com/V4/");Κουμπί WebElement = driver.findElement (By.name ("btnLogin"));// Είσοδος στο Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("κωδικός πρόσβασης")). sendKeys ("amUpenu");// Εκτέλεση Κάντε κλικ στο κουμπί LOGIN χρησιμοποιώντας το JavascriptExecutorjs.executeScript ("ορίσματα [0]. κλικ ();", κουμπί);// Για να δημιουργήσετε το παράθυρο ειδοποίησης χρησιμοποιώντας το JavascriptExecutor. Εμφάνιση του μηνύματος ειδοποίησηςjs.executeScript ("ειδοποίηση ('Καλώς ήλθατε στο Guru99');");}}
Έξοδος: Όταν ο κώδικας εκτελείται με επιτυχία. Θα παρατηρήσετε
- Επιτυχές κλικ στο κουμπί σύνδεσης και το
- Θα εμφανιστεί το παράθυρο ειδοποίησης (δείτε την παρακάτω εικόνα).
2) Παράδειγμα: Λήψη δεδομένων Scrape και πλοήγηση σε διαφορετικές σελίδες χρησιμοποιώντας το JavaScriptExecutor.
Εκτελέστε το παρακάτω σενάριο σεληνίου. Σε αυτό το παράδειγμα,
- Ξεκινήστε τον ιστότοπο
- Λήψη των λεπτομερειών του ιστότοπου, όπως διεύθυνση URL του ιστότοπου, όνομα τίτλου και όνομα τομέα του ιστότοπου.
- Στη συνέχεια, μεταβείτε σε διαφορετική σελίδα.
εισαγωγή org.openqa.selenium.JavascriptExecutor;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Test;δημόσια τάξη JavaSE_Test {@Δοκιμήδημόσια άκυρη Είσοδος (){Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();// Δημιουργία αντικειμένου διασύνδεσης JavascriptExecutor με Type CastingΠρόγραμμα οδήγησης JavascriptExecutor js = (JavascriptExecutor);// Εκκίνηση του ιστότοπου.driver.get ("http://demo.guru99.com/V4/");// Ανάκτηση του ονόματος τομέα του ιστότοπου. Tostring () αλλάξτε αντικείμενο σε όνομα.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Όνομα τομέα του ιστότοπου =" + Όνομα τομέα);// Λήψη της διεύθυνσης URL του ιστότοπου. Tostring () αλλάξτε αντικείμενο σε όνομαString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL του ιστότοπου =" + url);// Μέθοδος document.title λήψη του ονόματος τίτλου του ιστότοπου. Tostring () αλλάξτε αντικείμενο σε όνομαString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Τίτλος της σελίδας =" + Όνομα τίτλου);// Πλοηγηθείτε στη νέα σελίδα, δηλαδή για δημιουργία σελίδας πρόσβασης. (εκκίνηση νέας διεύθυνσης URL)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Έξοδος: Όταν ο παραπάνω κώδικας εκτελείται με επιτυχία, θα ανακτήσει τις λεπτομέρειες του ιστότοπου και θα μεταβεί σε διαφορετική σελίδα όπως φαίνεται παρακάτω.
[TestNG] Τρέξιμο:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customuite.xmllog4j: ΠΡΟΕΙΔΟΠΟΙΗΣΗ Δεν βρέθηκαν προσθήκες για το καταγραφικό (org.apache.http.client.protocol.RequestAddCookies)log4j: ΠΡΟΕΙΔΟΠΟΙΗΣΗ Παρακαλούμε αρχικοποιήστε σωστά το σύστημα log4j.log4j: WARN Δείτε http://logging.apache.org/log4j/1.2/faq.html#noconfig για περισσότερες πληροφορίες.Όνομα τομέα του ιστότοπου = demo.guru99.comΔιεύθυνση URL του ιστότοπου = http://demo.guru99.com/V4/Τίτλος της σελίδας = Αρχική σελίδα Guru99 BankPASSED: Είσοδος===============================================Προεπιλεγμένη δοκιμήΟι δοκιμές εκτελούνται: 1, Αποτυχίες: 0, Παράλειψη: 0===============================================
3) Παράδειγμα: Μετακινηθείτε προς τα κάτω Χρησιμοποιώντας JavaScriptExecutor.
Εκτελέστε το παρακάτω σενάριο σεληνίου. Σε αυτό το παράδειγμα,
- Ξεκινήστε τον ιστότοπο
- Κάντε κύλιση προς τα κάτω κατά 600 pixel
εισαγωγή org.openqa.selenium.JavascriptExecutor;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Test;δημόσια τάξη JavaSE_Test {@Δοκιμήδημόσια άκυρη Είσοδος (){Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();// Δημιουργία αντικειμένου διασύνδεσης JavascriptExecutor με Type CastingΠρόγραμμα οδήγησης JavascriptExecutor js = (JavascriptExecutor);// Εκκίνηση του ιστότοπου.driver.get ("http://moneyboats.com/");// Μεγιστοποίηση παραθύρουdriver.manage (). window (). μεγιστοποίηση ();// Κάθετη κύλιση προς τα κάτω κατά 600 pixeljs.executeScript ("window.scrollBy (0,600)");}}
Έξοδος : Όταν εκτελείται ο παραπάνω κώδικας, θα μετακινηθεί προς τα κάτω κατά 600 pixel (δείτε την εικόνα παρακάτω).
Περίληψη:
Το JavaScriptExecutor χρησιμοποιείται όταν το Selenium Webdriver αποτυγχάνει να κάνει κλικ σε οποιοδήποτε στοιχείο λόγω κάποιου προβλήματος.
- Το JavaScriptExecutor παρέχει δύο μεθόδους "executescript" & "executeAsyncScript" για χειρισμό.
- Εκτελέστηκε το JavaScript χρησιμοποιώντας το Selenium Webdriver.
- Απεικονίζεται πώς να κάνετε κλικ σε ένα στοιχείο μέσω JavaScriptExecutor, εάν το σελήνιο δεν κάνει κλικ στο στοιχείο λόγω κάποιου προβλήματος.
- Δημιουργήθηκε το παράθυρο "Ειδοποίηση" χρησιμοποιώντας το JavaScriptExecutor.
- Πλοηγηθήκατε στη διαφορετική σελίδα χρησιμοποιώντας το JavaScriptExecutor.
- Έγινε κύλιση προς τα κάτω στο παράθυρο χρησιμοποιώντας το JavaScriptExecutor.
- Λήψη διεύθυνσης URL, τίτλου και ονόματος τομέα χρησιμοποιώντας το JavaScriptExecutor.