efficient selenium scripting
Στο προηγούμενο σεμινάριο, συζητήσαμε τις τεχνικές επιπτώσεις κατά την υλοποίηση της καταγραφής σε ένα πλαίσιο . Συζητήσαμε βοηθητικό πρόγραμμα log4j στο μήκος. Συζητήσαμε τα βασικά στοιχεία που αποτελούν log4j από την άποψη της χρηστικότητας. Με τα Appenders και τις διατάξεις, ένας χρήστης αξιοποιείται για να επιλέξει την επιθυμητή μορφή / μοτίβο καταγραφής και την πηγή / τοποθεσία δεδομένων.
Στο τρέχον 27ο σεμινάριο σε αυτό ολοκληρωμένη δωρεάν σειρά εκπαιδευτικών σεληνίου , θα στρέψαμε την εστίασή μας σε λίγα ασήμαντα ακόμη σημαντικά θέματα που θα μας καθοδηγήσει στην αντιμετώπιση ορισμένων επαναλαμβανόμενων προβλημάτων. Μπορούμε ή όχι να τα χρησιμοποιούμε σε καθημερινή δέσμη ενεργειών, αλλά θα ήταν χρήσιμα μακροπρόθεσμα.
Εμείς θα συζητήσουμε κάποιες προγενέστερες έννοιες στις οποίες θα ασχοληθήκαμε με συμβάντα ποντικιού και πληκτρολογίου, προσπελάζοντας πολλαπλούς συνδέσμους εφαρμόζοντας λίστες . Γιατί λοιπόν, ας ξεκινήσουμε και να συζητήσουμε σύντομα αυτά τα θέματα με τη βοήθεια κατάλληλων σεναρίων και αποσπασμάτων κώδικα.
δωρεάν αποκλεισμός αναδυόμενων παραθύρων για το google chrome
Τι θα μάθετε:
- Εκτελεστές JavaScript
- Πρόσβαση σε πολλά στοιχεία σε μια λίστα
- Χειρισμός συμβάντων πληκτρολογίου και ποντικιού
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Εκτελεστές JavaScript
Κατά την αυτοματοποίηση ενός δοκιμαστικού σεναρίου, υπάρχουν ορισμένες ενέργειες που αποτελούν εγγενές μέρος των δοκιμαστικών σεναρίων.
Αυτές οι ενέργειες μπορεί να είναι:
- Κάνοντας κλικ σε ένα κουμπί, υπερσύνδεσμο κ.λπ.
- Πληκτρολόγηση σε ένα πλαίσιο κειμένου
- Κύλιση κάθετα ή οριζόντια έως ότου εμφανιστεί το επιθυμητό αντικείμενο
- Και πολλα ΑΚΟΜΑ
Τώρα, είναι προφανές από τα προηγούμενα σεμινάρια ότι ο καλύτερος τρόπος αυτοματοποίησης τέτοιων ενεργειών είναι με τη χρήση εντολών Selenium.
Τι γίνεται όμως αν οι εντολές σεληνίου δεν λειτουργούν;
Ναι, είναι απολύτως πιθανό οι πολύ βασικές και στοιχειώδεις εντολές Selenium να μην λειτουργούν σε ορισμένες περιπτώσεις.
Τούτου λεχθέντος, για να μπορέσουμε να αντιμετωπίσουμε αυτήν την κατάσταση, φέρνουμε τους εκτελεστές JavaScript στην εικόνα.
Τι είναι οι εκτελεστές JavaScript;
Η διεπαφή JavascriptExecutor είναι μέρος του org.openqa.selenium και εφαρμόζει την κλάση java.lang.Object. Το JavascriptExecutor παρουσιάζει τις δυνατότητες εκτέλεσης JavaScript απευθείας εντός του προγράμματος περιήγησης ιστού. Για να είναι σε θέση να εκτελέσει το JavaScript, ορισμένοι μηχανισμοί με τη μορφή μεθόδων μαζί με ένα συγκεκριμένο σύνολο παραμέτρων παρέχονται κατά την εφαρμογή του.
Μέθοδοι
executeScript (σενάριο συμβολοσειράς, args)
Όπως υποδηλώνει το όνομα της μεθόδου, εκτελεί τη JavaScript μέσα στο τρέχον παράθυρο, ειδοποίηση, πλαίσιο κ.λπ. (το παράθυρο στο οποίο επικεντρώνεται η παρουσία του WebDriver)
executeAsyncScript (σενάριο συμβολοσειράς, args)
Όπως υποδηλώνει το όνομα της μεθόδου, εκτελεί τη JavaScript μέσα στο τρέχον παράθυρο, ειδοποίηση, πλαίσιο κ.λπ. (το παράθυρο στο οποίο επικεντρώνεται η παρουσία του WebDriver)
Οι παράμετροι και η δήλωση εισαγωγής είναι κοινές και στις δύο μεθόδους εκτέλεσης.
Παράμετροι
Σενάριο - το σενάριο που θα εκτελεστεί
Όρισμα - οι παράμετροι που απαιτεί το σενάριο για την εκτέλεσή του (εάν υπάρχουν)
Εισαγωγή δήλωσης
Για να μπορέσουμε να χρησιμοποιήσουμε το JavascriptExecutors στα σενάρια δοκιμής μας, πρέπει να εισαγάγουμε το πακέτο χρησιμοποιώντας την ακόλουθη σύνταξη:
εισαγωγή org.openqa.selenium.JavascriptExecutor;
Δείγμα κώδικα
# 1) Κάνοντας κλικ σε ένα στοιχείο ιστού
// Locating the web element using id WebElement element = driver.findElement(By.id('id of the webelement')); // Instantiating JavascriptExecutor JavascriptExecutor js = (JavascriptExecutor)driver; // Clicking the web element js.executeScript('arguments(0).click();', element);
# 2) Πληκτρολόγηση σε ένα πλαίσιο κειμένου
// Instantiating JavascriptExecutor JavascriptExecutor js = (JavascriptExecutor)driver; // Typing the test data into Textbox js.executeScript('document.getElementById(‘id of the element’).value=’test data’;”);
# 3) Κύλιση προς τα κάτω μέχρι να εμφανιστεί το στοιχείο ιστού
WebElement element=driver.findElement(By.xpath('//input(contains(@value,'Save'))')); // Instantiating the javascriptExecutor and scrolling into the view in the single test step ((JavascriptExecutor)driver).executeScript('arguments(0).scrollIntoView(true);',element);
Μπορείτε να βρείτε διάφορους άλλους τρόπους σύνταξης του κώδικα για πρόσβαση στο JavascriptExecutors.
Πρόσβαση σε πολλά στοιχεία σε μια λίστα
Μερικές φορές, ενδέχεται να συναντήσουμε στοιχεία του ίδιου τύπου, όπως πολλαπλούς υπερσυνδέσμους, εικόνες κ.λπ. διατεταγμένα σε μια λίστα ταξινομημένη ή χωρίς παραγγελία. Έτσι, είναι απολύτως λογικό να αντιμετωπίζουμε τέτοια στοιχεία με ένα μόνο κομμάτι κώδικα και αυτό μπορεί να γίνει χρησιμοποιώντας WebElement List. Ανατρέξτε στο παρακάτω στιγμιότυπο οθόνης για να κατανοήσετε τα στοιχεία για τα οποία αναφέρομαι.
Στην παραπάνω εικόνα, βλέπουμε ότι οι διάφοροι πάροχοι υπηρεσιών ανήκουν σε μια λίστα χωρίς ταξινόμηση. Έτσι, η επαλήθευση της δυνατότητας κλικ και της ορατότητας αυτών των στοιχείων μπορεί να γίνει με ένα μόνο κομμάτι κώδικα χρησιμοποιώντας μια λίστα στοιχείων.
Εισαγωγή δήλωσης
Για να μπορέσουμε να χρησιμοποιήσουμε μια λίστα WebElement στα σενάρια δοκιμής μας, πρέπει να εισαγάγουμε το πακέτο χρησιμοποιώντας την ακόλουθη σύνταξη:
εισαγωγή java.util.List;
Δείγμα κώδικα
// Storing the list List serviceProviderLinks = driver.findElements(By.xpath('//div(@id='ServiceProvider')//ul//li')); // Fetching the size of the list int listSize = serviceProviderLinks.size(); for (int i=0; iΥπάρχουν διάφορες απαιτήσεις βάσει των οποίων οι λίστες μπορούν να χρησιμοποιηθούν για την επαλήθευση των στοιχείων με κατάλληλες αλλαγές εφαρμογής.
Χειρισμός συμβάντων πληκτρολογίου και ποντικιού
Διαχείριση συμβάντων πληκτρολογίου
πώς να δημιουργήσετε έναν πίνακα συμβολοσειρών java
Όπως αναφέρθηκε και νωρίτερα, υπάρχουν πολλοί τρόποι αντιμετώπισης της ίδιας δήλωσης προβλημάτων σε διαφορετικά περιβάλλοντα.
Έτσι, κατά καιρούς προκύπτει η ανάγκη αντιμετώπισης ενός προβλήματος αλλάζοντας τη συμβατική στρατηγική διαπραγμάτευσης με μια πιο προηγμένη στρατηγική. Έχω παρακολουθήσει περιπτώσεις όπου δεν μπορούσα να ασχοληθώ με ειδοποιήσεις και αναδυόμενα κλπ. Με εντολές σεληνίου, επομένως έπρεπε να επιλέξω διαφορετικά βοηθητικά προγράμματα java για να το χειριστώ χρησιμοποιώντας εγκεφαλικά πληκτρολόγια και συμβάντα ποντικιού.
Η τάξη ρομπότ είναι μια τέτοια επιλογή για την εκτέλεση συμβάντων πληκτρολογίου και συμβάντων ποντικιού.
Ας κατανοήσουμε την ιδέα με τη βοήθεια ενός σεναρίου και την εφαρμογή του.
Σενάριο:
Ας συγκεντρώσουμε μια κατάσταση όπου ένα περιττό αναδυόμενο παράθυρο εμφανίζεται στην οθόνη, το οποίο δεν μπορεί να γίνει αποδεκτό ή να απορριφθεί χρησιμοποιώντας το Alert Interface, επομένως η μόνη σοφή επιλογή που μένει είναι να κλείσουμε το παράθυρο χρησιμοποιώντας τα πλήκτρα συντόμευσης - 'Alt + spacebar + C' . Ας δούμε πώς κλείνουμε το αναδυόμενο παράθυρο χρησιμοποιώντας Robot Class.
Πριν από την έναρξη της εφαρμογής, πρέπει να εισαγάγουμε το απαραίτητο πακέτο για να μπορέσουμε να χρησιμοποιήσουμε την κλάση ρομπότ στο δοκιμαστικό σενάριό μας.
Δήλωση εισαγωγής
εισαγωγή java.awt.Robot;
Δείγμα κώδικα
// Instantiating Robot class Robot rb =new Robot(); // Calling KeyPress event rb.keyPress(KeyEvent.VK_ALT); rb.keyPress(KeyEvent.VK_SPACE); rb.keyPress(KeyEvent.VK_C); // Calling KeyRelease event rb.keyRelease(KeyEvent.VK_C); rb.keyRelease(KeyEvent.VK_SPACE); rb.keyRelease(KeyEvent.VK_ALT);
Η κλάση ρομπότ μπορεί επίσης να χρησιμοποιηθεί για τον χειρισμό συμβάντων ποντικιού, αλλά ας δούμε εδώ τις δυνατότητες του σεληνίου να χειρίζεται συμβάντα ποντικιού.
Χειρισμός εκδηλώσεων ποντικιού
Το WebDriver προσφέρει ένα ευρύ φάσμα βοηθητικών προγραμμάτων αλληλεπίδρασης που ο χρήστης μπορεί να εκμεταλλευτεί για να αυτοματοποιήσει συμβάντα ποντικιού και πληκτρολογίου. Το Action Interface είναι ένα τέτοιο βοηθητικό πρόγραμμα που προσομοιώνει τις αλληλεπιδράσεις ενός χρήστη.
Έτσι, θα παρακολουθούσαμε το Action Interface να ποντάρει το ποντίκι σε ένα αναπτυσσόμενο μενού που στη συνέχεια ανοίγει μια λίστα επιλογών στο επόμενο σενάριο.
Σενάριο:
- Τοποθετήστε το ποντίκι στο αναπτυσσόμενο μενού
- Κάντε κλικ σε ένα από τα στοιχεία στις επιλογές λίστας
Δήλωση εισαγωγής
εισαγωγή org.openqa.selenium.interactions.Actions;
Δείγμα κώδικα
πώς μπορώ να ανοίξω αρχεία .jar
// Instantiating Action Interface Actions actions= new Actions(driver); // howering on the dropdown actions.moveToElement(driver.findElement(By. id ('id of the dropdown'))).perform(); // Clicking on one of the items in the list options WebElement subLinkOption=driver.findElement(By.id('id of the sub link')); subLinkOption.click();
συμπέρασμα
Σε αυτό το σεμινάριο, συζητήσαμε ορισμένα προηγμένα θέματα που σχετίζονται με την αποτελεσματική δέσμη ενεργειών και για την αντιμετώπιση προβλημάτων σεναρίων όπου ο χρήστης απαιτείται να χειρίζεται συμβάντα ποντικιού και πληκτρολογίου. Συζητήσαμε επίσης πώς να αποθηκεύσετε περισσότερα από ένα στοιχεία ιστού σε μια λίστα. Ελπίζω να μπορέσετε να αντιμετωπίσετε αυτά τα εμπόδια εάν αντιμετωπίσετε.
Επόμενο σεμινάριο # 28 : Για το επερχόμενο σεμινάριο της σειράς, θα συζητήσουμε το έννοια της δοκιμής βάσης δεδομένων χρησιμοποιώντας το Selenium WebDriver . Θα παρακολουθούσαμε τον μηχανισμό της σύνδεσης βάσης δεδομένων, το χτύπημα ερωτημάτων σεληνίου και τη λήψη των αποτελεσμάτων μέσω του Selenium WebDriver Code.
Συνιστώμενη ανάγνωση
- Εισαγωγή στο Selenium WebDriver - Selenium Tutorial # 8
- Εντοπισμός σφαλμάτων σεληνίου με αρχεία καταγραφής (Log4j Tutorial) - Selenium Tutorial # 26
- 30+ καλύτερα σεμινάρια σεληνίου: Μάθετε το σελήνιο με πραγματικά παραδείγματα
- Cucumber Selenium Tutorial: Αγγούρι Java Selenium WebDriver Integration
- Πώς να εντοπίσετε στοιχεία σε προγράμματα περιήγησης Chrome και IE για τη δημιουργία σεναρίων σεληνίου - Σεμινάριο Tutorial # 7
- Υλοποίηση του πρώτου σεναρίου WebDriver - Selenium WebDriver Tutorial # 10
- WebDriver Ολόκληρη εγκατάσταση και εγκατάσταση με το Eclipse - Selenium Tutorial # 9
- Δημιουργία Generics και Testsuites - Σελήνιο Tutorial # 22