Cypress Commands & Custom Commands: 21 Σημαντικά Γεγονότα

Πίνακας περιεχομένων

Εντολή κυπαρίσσι

Τι είναι το Cypress Commands;

Το Cypress μας παρέχει API και μεθόδους αλληλεπίδρασης με το περιβάλλον χρήστη της εφαρμογής. Είναι γνωστά ως Cypress Commands και βοηθούν στην αλληλεπίδραση της διαδικτυακής εφαρμογής. Όλες οι διαθέσιμες εντολές έχουν ενσωματωμένες μεθόδους και θα επικαλεστούμε τις μεθόδους μόνο στις δοκιμαστικές μας περιπτώσεις. Οι εντολές Cypress θα προσομοιώσουν μια παρόμοια ενέργεια με έναν χρήστη που προσπαθεί να εκτελέσει λειτουργίες στην εφαρμογή.

Εντολές αλληλεπίδρασης UI που παρέχονται από το Cypress

Υπάρχουν διάφορες εντολές που παρέχονται από το Cypress που αλληλεπιδρούν με το περιβάλλον χρήστη. Θα εξετάσουμε λεπτομερώς τη λίστα με όλες τις εντολές.

  • .Κάντε κλικ()
  • .dblclick ()
  • .κάντε δεξί κλικ()
  • .τύπος()
  • .Σαφή()
  • .έλεγχος()
  • . μη ελέγχου ()
  • .επιλέγω()
  • .δώσει το έναυσμα για()

Εντολή κλικ Cypress

.Κάντε κλικ() - Αυτή η εντολή είναι να κλικ οποιοδήποτε στοιχείο στο DOM.

Ακολουθούν οι συνταγές για την εντολή κλικ

.click() 

.click(options) 

.click(position) 

.click(position, options) 

.click(xCoordinate, yCoordinate) 

.click(xCoordinate, yCoordinate, options) 

Όπως μπορείτε να δείτε παραπάνω, το κλικ δέχεται παραμέτρους όπως επιλογές, θέση, και συντεταγμένες.

Επιλογές

Οι πιθανές επιλογές που μπορούν να περάσουν για κλικ είναι

ΕπιλογήΑθέτησηΠεριγραφή
altKeyψευδήςΕνεργοποιήστε το εναλλακτικό πλήκτρο (Option Key στο Mac), όπως optionKey
ctrlKeyψευδήςΕνεργοποιήστε το πλήκτρο ελέγχου. Επίσης γνωστός ως: controlKey.
metaKeyψευδήςΕνεργοποιεί το μετα -κλειδί (κλειδί Windows στα Windows ή κλειδί εντολών σε Mac). Επίσης: commandKeycmdKey.
ShiftKeyψευδήςΕνεργοποιεί το πλήκτρο shift
κούτσουροαληθήςΕκτυπώνει τα αρχεία καταγραφής στη γραμμή εντολών
δύναμηςψευδήςΑυτή η επιλογή αναγκάζει τη δράση και απενεργοποιεί την αναμονή για δυνατότητα δράσης
πολλαπλούςψευδήςΚάντε διαδοχικά κλικ σε πολλά στοιχεία
χρονικού ορίουdefaultCommandTimeoutTimeρα για .click () περιμένετε πριν επιλύσετε το χρονικό όριο
αναμονή για κινούμενα σχέδιααναμονή για κινούμενα σχέδιαΕπιλογή αναμονής για την ολοκλήρωση της κίνησης των στοιχείων πριν εκτελέσετε την εντολή
Επιλογές στο κλικ

θέσεις

Οι διαφορετικοί τύποι θέσεων που μπορούν να περάσουν στο .click () είναι

  • κέντρο (αθέτηση)
  • αριστερά
  • δεξιά
  • κορυφή
  • πάνω αριστερά
  • πάνω δεξιά
  • κάτω μέρος
  • κάτω αριστερά
  • κάτω δεξιά

Παράδειγμα

cy.get('btn').click() //κάνοντας κλικ στο κουμπί cy.get('btn').κλικ({ force: true }) //κάνοντας κλικ στο κουμπί περνώντας την επιλογή 'force' ως true cy. get('btn').κλικ('bottomRight') // κάνοντας κλικ στο κουμπί στην κάτω δεξιά θέση cy.get('btn').click(10, 70, { force: true }) // κάνοντας κλικ στο κουμπί με τιμή θέσης και δύναμη αληθής

Cypress Εντολή διπλού κλικ

Το διπλό κλικ μπορεί να επιτευχθεί με τη χρήση dblclick() σύνταξη στο Cypress.

Σύνταξη

.dblclick()
.dblclick(position)
.dblclick(x, y)
.dblclick(options)
.dblclick(position, options)
.dblclick(x, y, options)

Επιλογές

.dblclick() αποδέχεται όλες τις επιλογές που γίνονται αποδεκτές από .click()Το Μπορείτε να βρείτε τις επιλογές στην παραπάνω ενότητα.

θέσεις

Όλες οι πιθανές θέσεις που καθορίζονται στο .click() είναι επίσης διαθέσιμα για dblclick()Το Ο κατάλογος των θέσεων βρίσκεται στην παραπάνω ενότητα.

Παράδειγμα

cy.get('button').dblclick() // Διπλό κλικ στο κουμπί cy.focused().dblclick() // Διπλό κλικ στο στοιχείο με εστίαση cy.contains('Home').dblclick() // Double κάντε κλικ στο πρώτο στοιχείο που περιέχει 'Αρχική' cy.get('button').dblclick('top') // Κάντε διπλό κλικ στο κουμπί στην επάνω θέση cy.get('button').dblclick(30, 10) // Κάντε διπλό κλικ στις συντεταγμένες των 30 και 10

Cypress Εντολή δεξιού κλικ

Αυτή η εντολή Cypress, κάνει δεξί κλικ στο στοιχείο DOM .rightclick() εντολή δεν θα ανοίξει μενού περιβάλλοντος του προγράμματος περιήγησης.rightclick() χρησιμοποιείται για τον έλεγχο της διαχείρισης συμβάντων που σχετίζονται με το δεξί κλικ στην εφαρμογή, όπως π.χ. contextmenu.

Σύνταξη

.rightclick()
.rightclick(position)
.rightclick(options)
.rightclick(position, options)
.rightclick(x, y)
.rightclick(x, y, options)

Επιλογές

Όπως είδαμε παραπάνω, όλες οι επιλογές που γίνονται αποδεκτές από .click() εντολή μπορεί να ρυθμιστεί με .rightclick() εντολή επίσης.

θέσεις

Όλες οι πιθανές θέσεις που μπορούν να περάσουν στο .rightclick() είναι το ίδιο με το .click() αναφέρθηκε παραπάνω.

Παράδειγμα

cy.get(" / Κάντε δεξί κλικ στο πρώτο στοιχείο που περιέχει 'Ιανουάριος' cy.get('button').dblclick('topRight') // Κάντε διπλό κλικ στο κουμπί στην επάνω δεξιά θέση cy.get('button').dblclick(80, 20 ) // Κάντε διπλό κλικ στις συντεταγμένες των 80 και 20

Εντολή Τύπου Κυπαρισσιού

.type() εντολή εισάγει τιμή σε ένα στοιχείο DOM.

Σύνταξη

.type(text)
.type(text, options)

Επιχειρήματα

.type() δέχεται τη συμβολοσειρά ως όρισμα. Οι αξίες πέρασαν σε .type() μπορεί να περιλαμβάνει οποιαδήποτε από τις ακολουθίες ειδικών χαρακτήρων που δίνονται παρακάτω.

ΑκολουθίαNotes
{{}Μπαίνει στην κυριολεκτική { κλειδί
{backspace}Διαγράφει τον χαρακτήρα από τα δεξιά προς τα αριστερά του δρομέα
{del}Αφαιρεί τον χαρακτήρα από αριστερά προς τα δεξιά του κέρσορα
{downarrow}Μετατοπίζει τον κέρσορα προς τα κάτω
{end}Μετατοπίζει τον κέρσορα στο τέλος της γραμμής
{enter}Πληκτρολογεί το κλειδί Enter
{esc}Πληκτρολογεί το πλήκτρο Escape
{home}Μετατοπίζει τον κέρσορα στην αρχή της γραμμής
{insert}Θέσεις χαρακτήρα στα δεξιά του κέρσορα
{leftarrow}Μετακινεί τον κέρσορα αριστερά
{movetoend}Μετατοπίζει τον κέρσορα στο τέλος του στοιχείου με δυνατότητα δακτυλογράφησης
{movetostart}Μετατοπίζει τον κέρσορα στην αρχή του στοιχείου με δυνατότητα δακτυλογράφησης
{pagedown}Κύλιση προς τα κάτω
{pageup}Κύλιση προς τα πάνω
{rightarrow}Μετατοπίζει τον κέρσορα δεξιά
{selectall}Επιλέγει όλο το κείμενο δημιουργώντας ένα selection range
{uparrow}Μετατοπίζει τον κέρσορα προς τα πάνω

Επιλογές

Μπορούμε να περάσουμε στα αντικείμενα ως επιλογές για να τροποποιήσουμε την προεπιλεγμένη συμπεριφορά του .type()

ΕπιλογήΑθέτησηΠεριγραφή
delay10Επιλογή για καθυστέρηση εγκαίρως μετά από κάθε πάτημα πλήκτρου
forcefalseΑναγκάζει τη δράση να εκτελεστεί και απενεργοποιεί αναμονή για δράση
logtrueΕμφανίζει τα αρχεία καταγραφής στο Αρχείο καταγραφής εντολών
parseSpecialCharSequencestrueΑνάλυση ειδικών χαρακτήρων για χορδές που περιστοιχίζονται {}, Όπως {esc}Το Μπορείτε να ορίσετε την επιλογή σε false για εισαγωγή των κυριολεκτικών χαρακτήρων.
releasetrueΑυτή η επιλογή σας επιτρέπει να ενεργοποιήσετε τη διατήρηση ενός τροποποιητή μεταξύ εντολών
scrollBehaviorscrollBehaviorΘέση θύρας προβολής στο σημείο που πρέπει να γίνει κύλιση πριν εκτελέσετε οποιαδήποτε εντολή
timeoutdefaultCommandTimeoutTimeρα να περιμένουμε .type() εντολή επίλυσης πριν το χρονικό όριο
waitForAnimationswaitForAnimationsΝα πει αν θα περιμένει στοιχεία για να τελειώστε την εμψύχωση πριν εκτελέσετε οποιαδήποτε εντολή.
Επιλογές για εντολή τύπου

Παράδειγμα

Ας δούμε παραδείγματα για .type() εντολή

cy.get('textarea').type('Hey there') // εισάγετε τιμή στην περιοχή κειμένου cy.get('body').type('{shift}') //ενεργοποιεί το πλήκτρο shift cy.get ('body').type('{rightarrow}') //type event δεξιό βέλος 

Εντολή Cypress Clear

Η εντολή Clear θα διαγράψει τις τιμές στην περιοχή εισαγωγής ή στο πεδίο κειμένου.

Σύνταξη

Η σύνταξη για σαφή εντολή είναι η ακόλουθη.

.clear()
.clear(options)

Επιλογές

Θα εξετάσουμε τις επιλογές που μπορούν να περάσουν στο .clear() εντολή.

ΕπιλογήΑθέτησηΠεριγραφή
forcefalseΑυτό θα αναγκάσει τη δράση και θα απενεργοποιήσει την αναμονή για να εμφανιστεί η δυνατότητα δράσης
logtrueΕμφανίζει την εντολή στο αρχείο καταγραφής εντολών
scrollBehaviorscrollBehaviorΘέση θύρας προβολής στο σημείο στο οποίο πρέπει να γίνει κύλιση ενός στοιχείου πριν από την εκτέλεση της εντολής
timeoutdefaultCommandTimeoutΑυτή η επιλογή είναι η ώρα που πρέπει να περιμένετε .clear() για επίλυση πριν από το χρονικό όριο
waitForAnimationswaitForAnimationsΑυτό θα περιμένει για την ολοκλήρωση των κινούμενων στοιχείων πριν από την εκτέλεση της εντολής.
Επιλογές για καθαρή εντολή

Παράδειγμα

Ας δούμε τα παραδείγματα για σαφή εντολή

cy.get('[type="text"]').clear() // Εκκαθάριση εισαγωγής τύπου text cy.get('textarea').type('Welcome!').clear() // Εκκαθάριση textarea cy .focused().clear() // Διαγραφή εστιασμένης εισόδου/textarea

Εντολή ελέγχου κυπαρισσιού

Η εντολή ελέγχου θα ελέγξει ή με πιο απλές λέξεις, επιλέξτε τα πλαίσια ελέγχου ή τα κουμπιά επιλογής. Μπορείτε να καταργήσετε την επιλογή των πλαισίων ελέγχου ή των κουμπιών επιλογής χρησιμοποιώντας το .uncheck() εντολή.

Σύνταξη

Θα κατανοήσουμε τη σύνταξη για την εντολή ελέγχου στο Cypress.

//Syntax for check command
.check()
.check(value)
.check(options)
.check(values, options)

//Syntax for uncheck command
.uncheck()
.uncheck(value)
.uncheck(options)
.uncheck(values, options)

Επιλογές

Οι πιθανές επιλογές που μπορούν να μεταβιβαστούν για έλεγχο/κατάργηση εντολών είναι οι ίδιες επιλογές με την καθαρή εντολή που παρατίθεται παραπάνω

Παράδειγμα

Θα εξετάσουμε το παράδειγμα του πώς μπορούμε να χρησιμοποιήσουμε εντολές ελέγχου και κατάργησης ελέγχου.

cy.get('[type="checkbox"]').check() // Έλεγχος στοιχείου πλαισίου ελέγχου cy.get('[type="radio"]').first().check() // Check first radio στοιχείο cy.get('[type="radio"]').check('Male') //Ελέγξτε το στοιχείο ραδιοφώνου που έχει Male cy.get('[type="checkbox"]').αποεπιλέξτε() / /Απεπιλέξτε το στοιχείο πλαισίου ελέγχου cy.get('[type="radio"]').αποεπιλέξτε() //Αποεπιλέξτε το πρώτο ραδιοστοιχείο cy.get('[type="checkbox"]').αποεπιλέξτε('Πρωινό') // Καταργήστε την επιλογή του στοιχείου πρωινού

Εντολή επιλογής Cypress

Η εντολή select Cypress σάς επιτρέπει να επιλέξετε στοιχεία εντός ενός ετικέτα.

Σύνταξη

Τα παρακάτω είναι η σύνταξη για την εντολή επιλογής

.select(value)
.select(values)
.select(value, options)
.select(values, options)

Επιλογές

Μπορούμε να περάσουμε τις επιλογές για να τροποποιήσουμε την προεπιλεγμένη συμπεριφορά της εντολής επιλογής.

ΕπιλογήΑθέτησηΠεριγραφή
forcefalseΑυτή η επιλογή αναγκάζει τη δράση να πραγματοποιηθεί και απενεργοποιεί την αναμονή για δράση
logtrueΕμφανίζει τα αρχεία καταγραφής στο αρχείο καταγραφής εντολών και ορίζεται ως προεπιλογή ως αληθές
timeoutdefaultCommandTimeoutΑυτή η επιλογή είναι η ώρα που πρέπει να περιμένετε .select() για επίλυση πριν από το χρονικό όριο
Επιλογές για εντολή επιλογής

Παράδειγμα

Ας δούμε παραδείγματα για την εντολή επιλογής

cy.get('select').select('butterfly') // Επιλέξτε την επιλογή 'butterfly' cy.get('select').select(0) // επιλέγει το στοιχείο με 0 ευρετήριο cy.get('select ').select(['parrot', 'peacock']) //επιλέγει την επιλογή parrot and peacock

Εντολή σκανδάλης Cypress

Η εντολή ενεργοποίησης βοηθά στην ενεργοποίηση οποιουδήποτε συμβάντος στο στοιχείο.

Σύνταξη

Θα εξετάσουμε τη σύνταξη για πρόσβαση στην εντολή σκανδάλης

.trigger(eventName)
.trigger(eventName, position)
.trigger(eventName, x, y)
.trigger(eventName, position, options)
.trigger(eventName, options)
.trigger(eventName, x, y, options)

Επιλογή

Η εντολή ενεργοποίησης δέχεται όλες τις επιλογές για τις οποίες αναφέρεται .clear() εντολή. Επιπλέον, υπάρχουν λίγες επιλογές που μπορούμε να διαμορφώσουμε και αναφέρονται παρακάτω.

ΕπιλογήΑθέτησηΠεριγραφή
bubblestrueΑν το συμβάν πρέπει να κάνει φούσκα
cancelabletrueΑν η εκδήλωση μπορεί να ακυρωθεί
eventConstructorEventΟ κατασκευαστής για τη δημιουργία του αντικειμένου συμβάντος (π MouseEvent, keyboardEvent)
Επιλογή για εντολή ενεργοποίησης

Παράδειγμα

Αφήστε μας διαφορετικούς τρόπους χρήσης .trigger() στον κώδικα.

cy.get('a').trigger('mouseover') // Ενεργοποίηση συμβάντος mouseover σε σύνδεσμο cy.get('.target').trigger('mousedown', { button: 0 }) //mousedown ενεργοποιήθηκε στο button 0 cy.get('button').trigger('mouseup', topRight, { bubbles: false }) //mouseup ενεργοποιήθηκε στην topRight θέση με ρύθμιση του συννεφάκι ως false

Οι εντολές του Κυπαρισσιού είναι συγχρονισμένες;

Όλες οι εντολές Cypress είναι ασύγχρονες. Βρίσκονται σε ουρά για εκτέλεση σε μεταγενέστερο χρονικό σημείο και δεν θα περιμένουν την ολοκλήρωση των εντολών. Η εντολή Cypress δεν κάνει τίποτα τη στιγμή της κλήσης, αλλά την αποθηκεύει για αργότερα για εκτέλεση. Μπορείτε να καταλάβετε την ασύγχρονη συμπεριφορά του Κυπαρίσσι εδώ

Κυπαρίσσι αλυσοδέκτες εντολές

Στο Cypress, μπορούμε να χρησιμοποιήσουμε μια σειρά εντολών για αλληλεπίδραση με στοιχεία στο DOM. Είναι επιτακτική ανάγκη να κατανοήσουμε πώς λειτουργεί η αλυσίδα των εντολών εσωτερικά. Εάν συνδέουμε εντολές σε μια συγκεκριμένη γραμμή, τότε το Cypress θα χειριστεί μια υπόσχεση που βασίζεται στην αλυσίδα εντολών και θα δώσει μια εντολή βασισμένη στο θέμα της επόμενης εντολής, μέχρι να τελειώσει η αλυσίδα εντολών ή να συμβεί σφάλμα.

Το Cypress μας επιτρέπει να κάνουμε κλικ σε ένα στοιχείο ή να πληκτρολογήσουμε στοιχεία χρησιμοποιώντας το .click() or .type() εντολές παίρνοντας τα στοιχεία χρησιμοποιώντας cy.get() or cy.contains()Το Ας δούμε ένα απλό παράδειγμα αλυσιδωτών εντολών

cy.get('textarea').type('Πώς είσαι;')

Στο παραπάνω παράδειγμα, cy.get() είναι μία εντολή Κυπαρίσσι και .type() είναι μια άλλη εντολή, όπου συνδέουμε την αλυσίδα .type() εντολή στο cy.get() εντολή, λέγοντάς του να πληκτρολογήσει στο θέμα που παράγεται από το cy.get() στοιχείο. Ομοίως, μπορούμε να αλυσιδώσουμε όλες τις εντολές που συζητήσαμε παραπάνω.

Chaining Assertion Commands στο Cypress

Παρόμοια με την αλυσίδα πολλαπλών εντολών χρησιμοποιώντας το Cypress, μπορούμε επίσης να αλυσοδέσουμε ισχυρισμούς με εντολές. Οι ισχυρισμοί είναι εντολές που σας επιτρέπουν να περιγράψετε το αναμένεται κατάσταση ή συμπεριφορά της εφαρμογής. Το Cypress θα περιμένει μέχρι τα στοιχεία να φτάσουν στην αναμενόμενη κατάσταση και η δοκιμή θα αποτύχει εάν οι ισχυρισμοί δεν περάσουν. Θα δούμε πώς μπορούμε να χρησιμοποιήσουμε αλυσιδωτές εντολές για την επιβεβαίωση ενός στοιχείου.

cy.get('button').should('be.disabled') //αναμένεται εάν το κουμπί θα πρέπει να απενεργοποιηθεί cy.get('form').should('have.class', 'form-vertical') / /expect εάν η φόρμα θα πρέπει να έχει κλάση ως 'form-vertical' cy.get('input').should('not.have.value', 'Name') // βεβαιωθεί ότι η είσοδος δεν πρέπει να έχει την τιμή 'Name' '

Όπως αναφέρθηκε παραπάνω, χρησιμοποιούμε το cy.get() εντολή και αλυσοδέστε το με το .should() εντολή διεκδίκησης για να περιμένουμε τη συμπεριφορά με βάση το αποτέλεσμα. Με αυτόν τον τρόπο, μπορούμε να χρησιμοποιήσουμε την αλυσίδα εντολές διεκδίκησης στο Κυπαρίσσι.

Προσαρμοσμένες εντολές κυπαρισσιού

Το Cypress μας παρέχει API για τη δημιουργία εντολών με βάση τις απαιτήσεις μας. Η προσαρμοσμένη εντολή Cypress είναι παρόμοια με τις προεπιλεγμένες εντολές που προϋπήρχαν, εκτός από αυτήν ορισμένο από τον χρήστηΤο Με προσαρμοσμένες εντολές, μπορούμε να παίξουμε με τις εντολές και να τις αλυσοδέσουμε με βάση την περίπτωση χρήσης μας. Οι προσαρμοσμένες εντολές κυπαρίσσιου είναι χρήσιμες στη ροή εργασιών μας, εάν απαιτείται επαναχρησιμοποίησή τους ξανά και ξανά στις δοκιμές.

Ας δούμε τη σύνταξη για τη δημιουργία μιας νέας προσαρμοσμένης εντολής στο Cypress.

Cypress.Commands.add(name, callbackFn)
Cypress.Commands.add(name, options, callbackFn)
Cypress.Commands.overwrite(name, callbackFn)

όπου τα επιχειρήματα έχουν ως εξής

όνομα - Το όνομα της εντολής στη συμβολοσειρά που θέλουμε να προσθέσουμε ή να αντικαταστήσουμε

επιστροφή κλήσηςFn - Αυτή η συνάρτηση παίρνει ένα όρισμα που μεταφέρεται στην εντολή

επιλογές - Περάστε οποιοδήποτε αντικείμενο επιλογών για να ορίσετε τη συμπεριφορά της εντολής

Note : οι επιλογές υποστηρίζονται μόνο για τις εντολές προσθήκης και δεν υποστηρίζουν τις εντολές αντικατάστασης

ΕπιλογήΑποδέχεταιΑθέτησηΠεριγραφή
prevSubjectBooleanString or Arrayfalseκαθορίζει τον τρόπο χειρισμού του θέματος που αποδόθηκε προηγουμένως.

Οι επιλογές που prevSubject δέχεται είναι ως εξής

  • false - αγνοήστε προηγούμενα θέματα (εντολή γονέα)
  • true - αποδεχτείτε τα προηγούμενα θέματα (εντολή για παιδιά)
  • optional - περάστε εάν θέλετε να ξεκινήσετε μια νέα αλυσίδα ή να χρησιμοποιήσετε μια υπάρχουσα αλυσίδα (διπλή εντολή)

Προσαρμοσμένη εντολή γονέα στο κυπαρίσσι

Θα δούμε πώς να προσθέσετε μια γονική προσαρμοσμένη εντολή στο Cypress. Η γονική εντολή θα ξεκινά πάντα μια νέα αλυσίδα εντολών, αν και έχετε κλείσει μια προηγούμενη εντολή. Η προηγούμενη αλυσιδωτή εντολή θα αγνοηθεί και μια νέα εντολή θα είναι πάντα αλυσοδεμένη. Μερικές από τις γονικές εντολές είναι cy.visit(), cy.get(), cy.request(),cy.exec(), cy.route()

Παράδειγμα

Θα δούμε ένα παράδειγμα για το πώς να γράψετε μια γονική προσαρμοσμένη εντολή στο Cypress

Cypress.Commands.add('clickLink', (label) => { cy.get('a').contains(label).click() }) //κάνοντας κλικ στον σύνδεσμο "Buy Now" cy.clickLink('Buy Τώρα')

Στο παραπάνω παράδειγμα, 'κάντε κλικ στο σύνδεσμο'είναι το όνομα της προσαρμοσμένης εντολής μας. Θα αναζητήσει το επιγραφήΤο Στη γραμμή 2, η εντολή παίρνει "a', και αναζητήστε τον σύνδεσμο που περιέχει ετικέτα και κάντε κλικ στο στοιχείο. cy.clickLink() θα εκτελέσει την ενέργεια στο αρχείο δοκιμής και θα κάνει κλικ στο "Άμεση αγορά" Σύνδεσμος.

Child Custom Command στο Cypress

Οι Child Custom εντολές στο Cypress είναι αλυσοδεμένες από μια γονική εντολή ή μια άλλη παιδική εντολή. Το θέμα από την προηγούμενη εντολή θα αποδοθεί στη λειτουργία επανάκλησης.

Μερικές από τις εντολές του Κυπαρισσιού που μπορούν να συνδεθούν με αλυσίδες ως εντολή για παιδιά είναι .click(), .trigger(), .should(), .find(), .as()

Παράδειγμα

Θα εξετάσουμε ένα παράδειγμα σχετικά με τον τρόπο αλυσίδας μιας προσαρμοσμένης εντολής για παιδιά

Cypress.Commands.add('forceClick', {prevSubject: 'element'}, (subject, options) => { // τυλίξτε το υπάρχον θέμα και κάντε κάτι με αυτό cy.wrap(subject).click({force:true }) }) //πρόσβαση στο forceClick στο δοκιμαστικό αρχείο cy.get("[data-test='panel-VALUES']").forceClick();

Στο παραπάνω παράδειγμα, ονομάζουμε την προσαρμοσμένη εντολή μας ως "forceClick'. Περνάμε το όρισμα prevSubject στο στοιχείο και τυλίγουμε το υπάρχον θέμα. Με cy.wrap(), κάνουμε κλικ με δύναμη στο θέμα. Στη συνέχεια, στο αρχείο δοκιμής, έχουμε πρόσβαση στην προσαρμοσμένη εντολή, "forceClick' πάνω σε cy.get() εντολή.

Διπλές προσαρμοσμένες εντολές στο κυπαρίσσι

Οι διπλές προσαρμοσμένες εντολές είναι υβριδικές μεταξύ εντολής γονέα και παιδιού. Μπορείτε να ξεκινήσετε μια νέα αλυσίδα εντολών ή να απενεργοποιήσετε μια υπάρχουσα εντολή. Οι διπλές εντολές είναι χρήσιμες εάν θέλουμε η εντολή μας να λειτουργεί με διαφορετικούς τρόπους με ή χωρίς το υπάρχον θέμα.

Μερικές από τις εντολές που μπορούν να χρησιμοποιηθούν για διπλές εντολές είναι cy.contains(), cy.screenshot(), cy.scrollTo(), cy.wait()

Παράδειγμα

Ας δούμε ένα παράδειγμα του τρόπου χρήσης διπλών προσαρμοσμένων εντολών

Cypress.Commands.add('getButton', { prevSubject: 'optional' }, (subject) => { if (subject) { cy.get(subject).get('btn').its('button'); } else { cy.get('btn').its('button'); } })

Σε ορισμένες περιπτώσεις, θα χρειαστεί να λάβουμε το κουμπί του κειμένου χρησιμοποιώντας το getButton το οποίο θα αποκτήσει όλο το κουμπί του στοιχείου. Τώρα μπορούμε να χρησιμοποιήσουμε το getButton για να αλυσοδέσουμε το στοιχείο γονέα ή να αλυσιδώσουμε το στοιχείο παιδί, όπου μπορεί να επικαλεστεί τα στοιχεία του γονέα.

Δεδομένου ότι η prevSubject είναι προαιρετικό, μπορούμε είτε να περάσουμε το θέμα ως επιχείρημα είτε να επικαλεστούμε την εντολή χωρίς το θέμα στο αρχείο δοκιμής όπως παρακάτω

cy.getButton() // χωρίς το θέμα cy.get('#loginBtn').getButton() // με το θέμα

Αντικατάσταση υπαρχουσών εντολών κυπαρισσιού

Μπορούμε να αντικαταστήσουμε τις ήδη υπάρχουσες εντολές Cypress και να τροποποιήσουμε τη συμπεριφορά για να αποφύγουμε τη δημιουργία μιας άλλης εντολής που θα προσπαθήσει να χρησιμοποιήσει την αρχική εντολή στο τέλος.

Μερικές από τις αρχικές εντολές Cypress που μπορούν να αντικατασταθούν είναι cy.visit(), cy.type(), cy.screenshot(), cy.contains()

Παράδειγμα

Ας δούμε ένα παράδειγμα για το πώς μπορούμε να αντικαταστήσουμε το υπάρχον Cypress εντολή.

Cypress.Commands.overwrite('contains', (originalFn, θέμα, φίλτρο, κείμενο, επιλογές = {}) => { // προσδιορίστε εάν πέρασε ένα όρισμα φίλτρου if (typeof text === 'object') { options = κείμενο κειμένου = φίλτρο φίλτρου = απροσδιόριστο } options.matchCase = εσφαλμένη επιστροφή originalFn(θέμα, φίλτρο, κείμενο, επιλογές) } )

Όπως είδαμε παραπάνω, χρησιμοποιούμε το Cypress.Commands. overwrite για να τροποποιήσετε την υπάρχουσα εντολή Cypress. Ονομάζουμε την προσαρμοσμένη εντολή μας ως contains και περνάμε ορίσματα για να καθορίσουμε αν το όρισμα φίλτρου έχει περάσει.

Εντολές εισαγωγής κυπαρισσιού

Σε αυτήν την ενότητα, θα κατανοήσουμε τον τρόπο εισαγωγής εντολών Cypress.

Πρέπει να δημιουργήσουμε τις προσαρμοσμένες εντολές μας Cypress στο κυπαρίσσι/υποστήριξη/εντολές.js αρχείο. Θα προσθέσουμε τις προσαρμοσμένες εντολές στο αρχείο command.js και θα εισαγάγουμε στο αρχείο δοκιμής για να το χρησιμοποιήσουμε.

Αρχείο Command.js

Cypress Custom Commands with Παράδειγμα

Θα καταλάβουμε πώς να δημιουργήσουμε μια προσαρμοσμένη εντολή και να τη χρησιμοποιήσουμε στο αρχείο προδιαγραφών μας με παράδειγμα σε πραγματικό χρόνο.

Όπως είδαμε παραπάνω, πρέπει να προσθέσουμε νέες προσαρμοσμένες εντολές κάτω από το εντολές.js αρχείο. Σε αυτό το αρχείο, ας προσθέσουμε μια προσαρμοσμένη εντολή για μια λειτουργία σύνδεσης

Cypress.Commands.add("login", (όνομα χρήστη, κωδικός πρόσβασης) => { //προσθήκη νέας εντολής με το όνομα login cy.get('[id=Email]').clear(); cy.get('[id =Email]').type(username); cy.get('[id=Password]').clear(); cy.get('[id=Password]').type(password); cy.get( '[type=submit]').click(); });
Προσαρμοσμένες εντολές στο αρχείο command.js

Στον παραπάνω κώδικα, ονομάζουμε την προσαρμοσμένη εντολή μας ως ΣύνδεσηΤο Μέσα στην προσαρμοσμένη εντολή, προσθέσαμε τα βήματα εκκαθάρισης του πεδίου ονόματος χρήστη και εισαγωγής τιμής στο πεδίο κειμένου. Ομοίως, καθαρίζουμε το πεδίο και προσθέτουμε τον κωδικό πρόσβασης στο πεδίο κωδικού πρόσβασης. Αργότερα, κάνουμε κλικ στο κουμπί υποβολής. Αυτή είναι μια απλή προσαρμοσμένη εντολή που δέχεται δύο ορίσματα: όνομα χρήστη και κωδικό πρόσβασης. Θα περάσουμε την τιμή για το όνομα χρήστη και τον κωδικό πρόσβασης στο αρχείο προδιαγραφών μας.

Τώρα ας δημιουργήσουμε ένα συγκεκριμένο αρχείο με όνομα customCommand.spec.js κάτω από το φάκελο ενσωμάτωσης. Το αρχείο προδιαγραφών μας θα περιέχει τον ακόλουθο κώδικα

describe("Παράδειγμα προσαρμοσμένων εντολών", () => { it("θα πρέπει να συνδεθείτε χρησιμοποιώντας τις προσαρμοσμένες εντολές", () => { cy.visit("https://admin-demo.nopcommerce.com/"); cy .login("admin@yourstore.com", "admin"); cy.url().should('be.equal', 'https://admin-demo.nopcommerce.com/admin/') }); });
Πρόσθετο αρχείο με πρόσβαση στην προσαρμοσμένη εντολή

Όπως είδαμε παραπάνω, έχουμε πρόσβαση στην προσαρμοσμένη εντολή μας ως cy.login() , όπου περνάμε τις τιμές του ονόματος χρήστη και του κωδικού πρόσβασης.

Cypress Custom Commands IntelliSense

Το IntelliSense παρέχει έξυπνες προτάσεις κώδικα στο IDE ή στον επεξεργαστή κώδικα απευθείας ενώ γράφουμε δοκιμές. Βοηθά με την εμφάνιση ενός αναδυόμενου παραθύρου που εμφανίζει τον ορισμό της εντολής, σύνδεσμο προς τη σελίδα τεκμηρίωσης και παραδείγματα κώδικα. Εάν χρησιμοποιούμε οποιονδήποτε σύγχρονο επεξεργαστή κώδικα όπως το Visual Studio Code ή το IntellJ, τότε το IntelliSense θα είναι πολύ χρήσιμο.

Το IntelliSense χρησιμοποιεί Typescript για να κατανοήσει και εμφανίζει τη σύνταξη. Εάν γράφουμε προσαρμοσμένες εντολές και παρέχουμε ορισμούς TypeScript για τις προσαρμοσμένες εντολές, μπορούμε να χρησιμοποιήσουμε τις τριπλές καμπύλες για την εμφάνιση του IntelliSense, ακόμη και αν το έργο μας χρησιμοποιεί μόνο JavaScript.

Για να διαμορφώσουμε το IntelliSense, πρέπει να περιγράψουμε τον κώδικα κυπαρίσσι/υποστήριξη/index.d.ts αρχείο.

// ορισμοί τύπων για το αντικείμενο Cypress "cy" /// δήλωση χώρου ονομάτων Cypress { διεπαφή Chainable { /** * Είσοδος με διαπιστευτήρια * @example * cy.login(username,password) */ login(username: String, password: String): Chainable } }

Τώρα, πρέπει να ενημερώσουμε τα αρχεία προδιαγραφών μας ότι υπάρχουν ορισμοί Typescript στο ευρετήριο.δ.τσ αρχείο. Έτσι, στην αρχή του αρχείου προδιαγραφών μας, προσθέστε τον παρακάτω κώδικα για να επιτρέψετε στο IntelliSense να μας προτείνει.

// οι ορισμοί τύπων για προσαρμοσμένες εντολές όπως "login" // θα επιλυθούν σε "cypress/support/index.d.ts" //
Η πρόταση παρέχεται από το IntelliSense

Όπως είδαμε παραπάνω, το IntelliSense μας παρέχει το επιχείρημα που δώσαμε στο αρχείο command.js και βοηθά στην αυτόματη συμπλήρωση.

Μεταβείτε στην κορυφή