Επαληθεύστε το στοιχείο Παρουσίαση και αναμονή για εντολή εισόδου Selenium
⚡ Έξυπνη Σύνοψη
Επαληθεύστε την παρουσία στοιχείου και τις εντολές waitFor στις Selenium Το IDE επιβεβαιώνει ότι μια σελίδα περιέχει τα στοιχεία και το κείμενο που αναμένει μια δοκιμή και διακόπτει την αναπαραγωγή μέχρι να γίνει αληθής μια δυναμική συνθήκη πριν εκτελεστεί το επόμενο βήμα.
Ένα ηχογραφημένο Selenium IDE κλικ και τύποι σεναρίων, αλλά από μόνο του δεν αποφασίζει ποτέ εάν η εφαρμογή συμπεριφέρθηκε σωστά. Δύο οικογένειες εντολών κάνουν αυτή τη δουλειά: επαληθεύει εντολές, οι οποίες ελέγχουν την κατάσταση της σελίδας, και περιμένετε εντολές, οι οποίες αναστέλλουν την εκτέλεση μέχρι η σελίδα να είναι έτοιμη για έλεγχο.
⚠️ Σημείωση για τις εκδόσεις: Τα παρακάτω στιγμιότυπα οθόνης προέρχονται από το πρωτότυπο Firefox-πρόσθετο Selenium IDE, το οποίο δεν διανέμεται πλέον, και χρησιμοποιούν τα ονόματα camelCase Selenese. Το τρέχον IDE είναι ένα Chrome, Firefox και Edge επέκταση προγράμματος περιήγησηςΗ συμπεριφορά που περιγράφεται εδώ εξακολουθεί να ισχύει, αλλά άλλαξαν αρκετά ονόματα εντολών — ένας χάρτηςping Ο πίνακας εμφανίζεται αργότερα σε αυτό το άρθρο και κάθε αρχική εντολή και στιγμιότυπο οθόνης διατηρείται ακριβώς όπως δημοσιεύτηκε.
Επαληθεύστε την παρουσία ενός στοιχείου
Μπορούμε να χρησιμοποιήσουμε τις ακόλουθες δύο εντολές για να επαληθεύσουμε την παρουσία ενός στοιχείου:
- verifyElementPresent – επιστρέφει TRUE εάν το καθορισμένο στοιχείο βρέθηκε στη σελίδα. ΛΑΘΟΣ αν διαφορετικά
- verifyElementNotPresent – επιστρέφει TRUE εάν το καθορισμένο στοιχείο ΔΕΝ ΒΡΕΘΗΚΕ πουθενά στη σελίδα. ΛΑΘΟΣ αν υπάρχει.
Και οι δύο εντολές δέχονται ένα στοιχείο τοποθετών στο Target πεδίο — ένα αναγνωριστικό, ένα όνομα, ένας επιλογέας CSS, ένα κείμενο συνδέσμου ή ένα XPath έκφραση — και καμία από τις δύο δεν χρειάζεται τιμή.
Το σενάριο δοκιμής παρακάτω επαληθεύει ότι το πλαίσιο κειμένου Όνομα χρήστη υπάρχει εντός του Mercury Περιηγήσεις στην αρχική σελίδα ενώ το πλαίσιο κειμένου Όνομα δεν είναι. Το πλαίσιο κειμένου First Name είναι στην πραγματικότητα ένα στοιχείο που υπάρχει στη σελίδα Εγγραφή του Mercury Περιηγήσεις, όχι στην αρχική σελίδα.
Γιατί αυτά είναι επαληθεύει εντολές αντί διεκδικώ εντολές, μια αποτυχία καταγράφεται στο αρχείο καταγραφής και τα υπόλοιπα βήματα εξακολουθούν να εκτελούνται. Αυτή η διάκριση καλύπτεται λεπτομερώς παρακάτω.
Επαληθεύστε την παρουσία ενός συγκεκριμένου κειμένου στην εντολή Selenium
Ο έλεγχος της ύπαρξης ενός στοιχείου δεν είναι πάντα αρκετός — μια δοκιμή συχνά χρειάζεται να επιβεβαιώσει τις λέξεις που εμφανίζονται στον χρήστη. Δύο εντολές κειμένου καλύπτουν αυτήν την περίπτωση.
- verifyTextPresent – επιστρέφει TRUE εάν η καθορισμένη συμβολοσειρά κειμένου βρέθηκε κάπου στη σελίδα. ΛΑΘΟΣ αν διαφορετικά
- verifyTextNotPresent – επιστρέφει TRUE εάν η καθορισμένη συμβολοσειρά κειμένου ΔΕΝ ΒΡΕΘΗΚΕ πουθενά στη σελίδα. ΛΑΘΟΣ αν βρέθηκε
Θυμηθείτε ότι αυτές οι εντολές κάνουν διάκριση πεζών-κεφαλαίων.
Το παρακάτω αρχείο καταγραφής δείχνει την ίδια σελίδα ελεγμένη δύο φορές με δύο ορθογραφίες της ίδιας φράσης.
Στο παραπάνω σενάριο, το "Ατλάντα προς Λας Βέγκας" αντιμετωπίστηκε διαφορετικά από το "Ατλάντα προς Λας Βέγκας", επειδή το γράμμα "Α" του "Ατλάντα" ήταν κεφαλαίο στο πρώτο ενώ πεζό στο άλλο. Όταν χρησιμοποιήθηκε η εντολή verifyTextPresent σε κάθε ένα από αυτά, το ένα πέρασε ενώ το άλλο απέτυχε.
Επαληθεύστε τη συγκεκριμένη θέση ενός στοιχείου
Τα ελαττώματα διάταξης σπάνια προκαλούν σφάλματα σε έναν εντοπιστή, επομένως οι έλεγχοι παρουσίας δεν τα καταφέρνουν. Οι εντολές θέσης καλύπτουν αυτό το κενό.
Selenium Το IDE υποδεικνύει τη θέση ενός στοιχείου μετρώντας (σε pixel) πόσο απέχει από την αριστερή ή την επάνω άκρη του παραθύρου του προγράμματος περιήγησης.
- verifyElementPositionLeft – επαληθεύει εάν ο καθορισμένος αριθμός pixel ταιριάζει με την απόσταση του στοιχείου από το αριστερό άκρο της σελίδας. Αυτό θα επιστρέψει FALSE εάν η καθορισμένη τιμή δεν ταιριάζει με την απόσταση από το αριστερό άκρο.
- verifyElementPositionTop – επαληθεύει εάν ο καθορισμένος αριθμός pixel ταιριάζει με την απόσταση του στοιχείου από την επάνω άκρη της σελίδας. Αυτό θα επιστρέψει FALSE εάν η καθορισμένη τιμή δεν ταιριάζει με την απόσταση από την επάνω άκρη.
Το παρακάτω σενάριο καταγράφει τις αναμενόμενες μετατοπίσεις pixel στη στήλη Τιμή.
Αντιμετωπίστε αυτές τις δύο εντολές με προσοχή. Η μετατόπιση των εικονοστοιχείων αλλάζει ανάλογα με το μέγεθος του παραθύρου, το επίπεδο ζουμ και τις εγκατεστημένες γραμματοσειρές, επομένως ένας αριθμός με ενσωματωμένο κώδικα που μεταβιβάζεται σε ένα μηχάνημα μπορεί να αποτύχει σε ένα άλλο.
Εντολές αναμονής Selenium
Μια εντολή επαλήθευσης μπορεί να ελέγξει μόνο ό,τι υπάρχει ήδη στην οθόνη, επομένως ένας έλεγχος που εκτελείται πολύ νωρίς αποτυγχάνει παρόλο που η εφαρμογή λειτουργεί. Οι εντολές αναμονής λύνουν αυτό το πρόβλημα χρονισμού.
Ακολουθούν οι τύποι εντολών αναμονής Selenium
και εντολές αναμονής
Αυτές είναι εντολές που θα περιμένουν να φορτώσει μια νέα σελίδα πριν προχωρήσουμε στην επόμενη εντολή.
παραδείγματα είναι
- κάντε κλικ και περιμένετε
- πληκτρολογήστε και περιμένετε
- επιλέξτε Και Περιμένετε
Κάθε μία από αυτές είναι μια συνηθισμένη εντολή ενέργειας με το επίθημα AndWait, όπως δείχνει το καταγεγραμμένο βήμα παρακάτω.
αναμονή για εντολές
Αυτές είναι εντολές που περιμένουν να γίνει αληθής μια καθορισμένη συνθήκη πριν προχωρήσετε στην επόμενη εντολή (ανεξάρτητα από τη φόρτωση μιας νέας σελίδας). Αυτές οι εντολές είναι πιο κατάλληλες για χρήση σε δυναμικούς ιστότοπους που βασίζονται σε AJAX που αλλάζουν τιμές και στοιχεία χωρίς να φορτώνουν ξανά ολόκληρη τη σελίδα. Τα παραδείγματα περιλαμβάνουν:
- περιμένωΤίτλο
- waitForTextPresent
- περιμένωΕιδοποίηση
Εξετάστε το σενάριο του Facebook παρακάτω.
Μπορούμε να χρησιμοποιήσουμε έναν συνδυασμό "κλικ" και "waitForTextPresent" για να επαληθεύσουμε την παρουσία του κειμένου "Παροχή των γενεθλίων σας".
Δεν μπορούμε να χρησιμοποιήσουμε το clickAndWait επειδή καμία σελίδα δεν φορτώθηκε κάνοντας κλικ στο "Γιατί πρέπει να παρέχω τα γενέθλιά μου;" Σύνδεσμος. Αν το κάνουμε, το τεστ θα αποτύχει
Ο ίδιος κανόνας ισχύει για οποιοδήποτε περιεχόμενο εισάγεται από σενάριο και όχι από πλοήγηση, γι' αυτό και Οθόνες που βασίζονται σε AJAX σχεδόν πάντα χρειάζεται waitFor αντί για andWait.
Εντολές Assert vs Verify vs waitFor σε Selenium IDE
Οι αρχάριοι συχνά επιλέγουν τη λάθος οικογένεια και μετά αναρωτιούνται γιατί μια σουίτα σταματά στο πρώτο ελάττωμα ή γιατί αναφέρει είκοσι βλάβες που όλες... tracπίσω στο ένα. Τα τρία προθέματα απαντούν σε τρεις διαφορετικές ερωτήσεις.
| Πρόθεμα | Τι κάνει | Σχετικά με την αποτυχία | καλύτερα χρησιμοποιείται για |
|---|---|---|---|
| διεκδικώ | Ελέγχει αμέσως μια συνθήκη | Καταγράφει την αποτυχία και διακόπτει την δοκιμαστική περίπτωση | Προϋποθέσεις — μια σύνδεση που πρέπει να είναι επιτυχής πριν αποκτήσει νόημα οτιδήποτε άλλο |
| επαληθεύει | Ελέγχει αμέσως μια συνθήκη | Καταγράφει την αποτυχία και συνεχίζει με την επόμενη εντολή | Ανεξάρτητοι έλεγχοι, όπως πολλές ετικέτες σε μία σελίδα επιβεβαίωσης |
| περίμενεΓια | Δημοσκοπήσεις μέχρι να γίνει αληθής η συνθήκη | Καταγράφει την αποτυχία μόλις λήξει το χρονικό όριο και στη συνέχεια συνεχίζει | Οτιδήποτε εμφανίζεται αργά — απαντήσεις AJAX, περιστρεφόμενα παράθυρα, διάλογοι |
Ένα πρακτικό μοτίβο συνδυάζει και τα τρία: επιβεβαιώστε τη σελίδα στην οποία καταλήξατε, περιμένετε το στοιχείο που φτάνει ασύγχρονα και, στη συνέχεια, επαληθεύστε κάθε μεμονωμένο πεδίο. Κάνοντας αυτό με αυτή τη σειρά, σημαίνει ότι μια προβληματική πλοήγηση σταματάει πρόωρα τη δοκιμή, ενώ μια χούφτα αισθητικών αναντιστοιχιών αναφέρονται όλες σε μία μόνο εκτέλεση. Η ίδια αρχή ισχύει και για Selenium δοκιμές γραμμένες σε κώδικα, όπου τα ισοδύναμα είναι αυστηροί ισχυρισμοί, μη ουσιαστικοί ισχυρισμοί και σαφείς αναμονές.
Εντολές επαλήθευσης και αναμονής στο ρεύμα Selenium IDE
The FirefoxΤο IDE του πρόσθετου (plugin IDE) που παρήγαγε τα παραπάνω στιγμιότυπα οθόνης αποσύρθηκε και το σύνολο εντολών ανακατασκευάστηκε για την τρέχουσα επέκταση προγράμματος περιήγησης. Αρκετά ονόματα Selenese επέζησαν, μερικά μετονομάστηκαν και μερικά αφαιρέθηκαν. Ο παρακάτω πίνακας αντιστοιχίζει τις εντολές που χρησιμοποιούνται σε αυτό το άρθρο με τις σημερινές τους ισοδύναμες, οι οποίες προέρχονται από την επίσημη Selenium Αναφορά εντολής IDE.
| Παλαιότερη εντολή Selenese | Εντολή στο τρέχον IDE |
|---|---|
| verifyElementPresent | επαλήθευση της παρουσίας στοιχείου |
| verifyElementNotPresent | επαλήθευση ότι το στοιχείο δεν υπάρχει |
| verifyTextPresent | επαλήθευση κειμένου (με πεδίο εφαρμογής έναν εντοπιστή στοιχείων, όχι ολόκληρη τη σελίδα) |
| verifyTextNotPresent | επαλήθευση όχι κειμένου (εμβέλεια σε έναν εντοπιστή στοιχείων) |
| επαλήθευσηΤίτλου | επαλήθευση τίτλου |
| verifyElementPositionLeft / verifyElementPositionTop | Δεν υπάρχει ισοδύναμο — οι δηλώσεις θέσης απορρίφθηκαν |
| κάντε κλικ στο κουμπί "ΚαιΠεριμένετε", πληκτρολογήστε "ΚαιΠεριμένετε", επιλέξτε "ΚαιΠεριμένετε" | Χωρίς επίθημα AndWait — η εντολή open περιμένει ήδη τη φόρτωση μιας σελίδας |
| waitForElementPresent | αναμονή για την παρουσία στοιχείου, με χρόνο αναμονής σε χιλιοστά του δευτερολέπτου |
| περιμένωΕιδοποίηση | επιβεβαιώστε την ειδοποίηση ή επαληθεύστε το κείμενο της ειδοποίησης μετά την εμφάνιση του παραθύρου διαλόγου |
Δύο διαφορές έχουν τη μεγαλύτερη σημασία στην καθημερινή εργασία. Πρώτον, οι τρέχουσες εντολές αναμονής — αναμονή για παρουσία στοιχείου, αναμονή για ορατό στοιχείο, αναμονή για επεξεργάσιμο στοιχείο και οι αρνητικές δίδυμες εντολές τους — απαιτούν η καθεμία έναν συγκεκριμένο χρόνο αναμονής σε χιλιοστά του δευτερολέπτου, επομένως ένα αργό βήμα δεν χρειάζεται πλέον να μοιράζεται ένα καθολικό χρονικό όριο. Δεύτερον, η αναζήτηση κειμένου σε ολόκληρη τη σελίδα έχει εξαφανιστεί: η επαλήθευση κειμένου χρειάζεται έναν εντοπιστή, ο οποίος συνήθως παράγει έναν πιο ευκρινή έλεγχο ούτως ή άλλως.
Συνηθισμένα σφάλματα με τις εντολές Verify και waitFor
Τα περισσότερα αναφερόμενα προβλήματα με αυτές τις εντολές δεν αποτελούν ελαττώματα στο IDE. Η παρακάτω λίστα καλύπτει τις βλάβες που εμφανίζονται συχνότερα και τι διορθώνει την καθεμία.
- Το στοιχείο υπάρχει αλλά ο έλεγχος εξακολουθεί να αποτυγχάνει. Η παρουσία και η ορατότητα είναι διαφορετικές καταστάσεις. Ένα στοιχείο που είναι κρυμμένο πίσω από έναν κανόνα CSS εξακολουθεί να υπάρχει στο DOM, επομένως συνδυάστε τον έλεγχο παρουσίας με την αναμονή για ορατό στοιχείο όταν η δοκιμή εξαρτάται από το αν ο χρήστης το βλέπει πραγματικά.
- Ένας έλεγχος κειμένου αποτυγχάνει σε διατύπωση που μοιάζει πανομοιότυπη. Τα μη διακοπτόμενα κενά, τα κενά στο τέλος και οι σγουρές απόστροφοι που αντιγράφονται από ένα έγγραφο σχεδίασης διακόπτουν μια ακριβή αντιστοίχιση. Πληκτρολογήστε ξανά την αναμενόμενη συμβολοσειρά χειροκίνητα αντί να την επικολλήσετε.
- Μια εντολή αναμονής λήγει σε μια σελίδα που φορτώθηκε σαφώς. Το στοιχείο βρίσκεται συνήθως μέσα σε ένα iframe. Εκτελέστε πρώτα την εντολή select frame, διαφορετικά ο εντοπιστής αξιολογείται σε σχέση με το λάθος έγγραφο.
- Το clickAndWait κολλάει σε μια εφαρμογή μίας σελίδας. Δεν πραγματοποιείται πλοήγηση, επομένως δεν υπάρχει λόγος αναμονής. Αντικαταστήστε το με ένα κλικ συν την κατάλληλη εντολή waitFor.
- Ένας έλεγχος θέσης περνάει τοπικά και αποτυγχάνει στον διακομιστή δημιουργίας. Το μέγεθος οθόνης και η απόδοση της γραμματοσειράς διαφέρουν. Προτιμήστε έλεγχο παρουσίας ή κειμένου ή ορίστε ένα σαφές μέγεθος παραθύρου στην αρχή της δοκιμής.
- Όλη η σουίτα σταματά στην πρώτη αναντιστοιχία. Καταγράφηκε μια εντολή assert ενώ προοριζόταν για εντολή verification. Αλλάξτε το πρόθεμα και η εκτέλεση θα αναφέρει κάθε αποτυχία αντί μόνο την πρώτη.
Μόλις ένα σενάριο επιβιώσει από αυτές τις παγίδες, το επόμενο βήμα είναι συνήθως να αποθήκευση τιμών χρόνου εκτέλεσης σε μεταβλητές έτσι ώστε οι έλεγχοι να συγκρίνονται με πραγματικά δεδομένα και όχι με στερεοκωδικοποιημένες συμβολοσειρές.






