ultimate xpath writing cheat sheet tutorial with syntax
Κορυφαίοι 20 τρόποι για να γράψετε Ultimate XPATH για ΟΠΟΙΟΔΗΠΟΤΕ τύπο στοιχείου Web (το XPATH δεν θα είναι ποτέ άκυρο):
Μια εφαρμογή ιστού αποτελείται από διαφορετικούς τύπους στοιχείων ιστού, όπως στοιχείο ιστού για ένα κουμπί για κλικ, εισαγωγή στοιχείου ιστού για πληκτρολόγηση κειμένου, αναπτυσσόμενο μενού, κουμπιά επιλογής κ.λπ.
Αυτά τα στοιχεία ιστού ονομάζονται επίσης ετικέτες ή κόμβοι.
Όταν πρόκειται για αυτοματοποίηση εφαρμογών ιστού, ξεκινά με τη σύνταξη ενός σεναρίου αυτοματισμού που θα βρει το στοιχείο ιστού, θα εκτελέσει μια ενέργεια σε αυτό όπως, κάντε κλικ σε ένα κουμπί, εισαγάγετε κείμενο στο πλαίσιο εισαγωγής, επιλέξτε ένα πλαίσιο ελέγχου, επιλέξτε ένα κουμπί επιλογής, μετακινηθείτε προς τα πάνω ή προς τα κάτω και, τέλος, επαληθεύστε την αναμενόμενη συμπεριφορά με τη σειρά της δράσης.
Τι θα μάθετε:
- Τι είναι το XPath και πώς μοιάζει;
- Κορυφαίοι 20 τρόποι για να γράψετε XPath για οποιοδήποτε στοιχείο Web
- # 1) Αντίστροφη αναζήτηση
- # 2) Χρήση μεταβλητών και προσαρμοσμένων τιμών
- # 3) Χρήση ετικετών 'XML', 'AND' κ.λπ.
- # 4) Χρήση χαρακτηριστικών και πίνακα XPATH
- # 5) Χρήση χαρακτηριστικών, πινάκων και κειμένου
- # 6) Δημιουργία XPATH χρησιμοποιώντας ένθετα χαρακτηριστικά
- # 7) Δημιουργία XPath συνδυάζοντας χαρακτηριστικά, διαιρέσεις και κουμπιά
- # 8) Δημιουργία XPATH χρησιμοποιώντας ΠΕΡΙΕΧΟΜΕΝΑ, ΑΝΤΙΣΤΡΟΦΗ ΛΟΓΟΤΥΠΟ, κ.λπ.
- # 9) Δημιουργία XPath χρησιμοποιώντας Relative, CONTAINS, REVERSE, FOLLOW SIBLING κ.λπ.
- # 10) Δημιουργία XPath χρησιμοποιώντας χαρακτηριστικά, Περιέχει, Αντίστροφη, Προηγούμενη αδελφή, Divs και Span
- # 11) Χρήση χαρακτηριστικών, ετικετών XML κ.λπ.
- # 12) Δημιουργία XPath με το να μην κοιτάζετε ολόκληρη τη σελίδα αλλά να εξετάζετε όλους τους συνδέσμους και να περιέχει
- # 13) Χρήση περιεχομένων και χαρακτηριστικών
- # 14) Χρήση χαρακτηριστικών, ακολουθώντας αδέλφια και απογόνους
- # 15) Χρήση χαρακτηριστικών, ακολουθώντας αδέλφια, απογόνους και κείμενο
- # 16) Χρήση κεφαλίδας και κειμένου
- # 17) Χρήση κεφαλίδας κειμένου, ακολουθώντας αδέλφια, διαδρομή κ.λπ.
- # 18) Χρήση χαρακτηριστικών, περιεχομένων και προηγούμενων αδελφών
- # 19) Αναζητώντας αναπτυσσόμενο μενού χρησιμοποιώντας το χαρακτηριστικό Id, κάποιο συγκεκριμένο κείμενο και Reverse Lookup
- # 20) Συνδυασμός χαρακτηριστικού 'id' και αναζήτηση συνδέσμου με συγκεκριμένο κείμενο
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Τι είναι το XPath και πώς μοιάζει;
Η εύρεση ενός στοιχείου είναι σαν να βρίσκετε το σπίτι κάποιου στο χάρτη. Ο μόνος τρόπος για να βρούμε το σπίτι ενός φίλου χωρίς εξωτερική βοήθεια είναι ότι πρέπει να έχουμε έναν χάρτη και να ξέρουμε τι να βρούμε (σπίτι).
Για να θέσουμε αυτήν την αναλογία στην περίπτωσή μας, ο χάρτης θα χρησιμοποιηθεί ως DOM (ετικέτες HTML, JavaScript κ.λπ.) όπου υπάρχουν όλα τα στοιχεία ιστού, μαζί με το συγκεκριμένο στοιχείο ιστού που θέλουμε να βρούμε.
Μόλις βρεθεί η μοναδική διεύθυνση ή διαδρομή ενός στοιχείου, το σενάριο αυτοματισμού θα εκτελέσει μερικές ενέργειες σε αυτό με βάση το σενάριο δοκιμής. Για παράδειγμα, θέλετε να επαληθεύσετε τη διεύθυνση URL της σελίδας που ανοίγει αφού κάνετε κλικ σε ένα κουμπί.
Ωστόσο, δεν είναι ευθεία προς τα εμπρός να βρείτε μια μοναδική διεύθυνση / διαδρομή ενός στοιχείου ιστού, καθώς ενδέχεται να υπάρχουν παρόμοιες ετικέτες, ίδιες τιμές χαρακτηριστικών, πανομοιότυπες διαδρομές που καθιστούν δύσκολη τη δημιουργία ακριβούς μοναδικής διεύθυνσης σε ένα στοιχείο ιστού που ονομάζεται 'XPATH'.
Εδώ, θα εμβαθύνουμε σε μερικές εξαιρετικές και αποτελεσματικές τεχνικές για τη δημιουργία έγκυρων και μοναδικών XPATH για κάθε τύπο στοιχείου ιστού.
Συνιστώμενη ανάγνωση => Προσδιορίστε στοιχεία Web χρησιμοποιώντας το XPath στο Selenium
Μερικές φορές μπορείτε εύκολα να δημιουργήσετε XPaths χρησιμοποιώντας επεκτάσεις προγράμματος περιήγησης, αλλά στο δικό μου δοκιμές αυτοματισμού καριέρα, έχω αντιμετωπίσει αμέτρητες καταστάσεις όπου οι παραδοσιακές επεκτάσεις προγράμματος περιήγησης δεν λειτουργούν και πρέπει να βρείτε τα δικά σας προσαρμοσμένα XPath χρησιμοποιώντας τη δική σας δημιουργικότητα. Είμαι σίγουρος ότι έχετε ή θα αντιμετωπίσετε παρόμοιες καταστάσεις.
Σε αυτό το σεμινάριο, θα ρίξουμε μια ματιά στους 20 καλύτερους τρόπους για το πώς να δημιουργήσετε το απόλυτο XPath για ένα στοιχείο ιστού με τέτοιο τρόπο ώστε ακόμη και όταν ο κώδικάς σας να αλλάξει, το XPath θα παραμείνει έγκυρο όλη την ώρα (εκτός εάν ο προγραμματιστής ξαναγράψει ολόκληρο χαρακτηριστικό / ενότητα).
Γνωρίζοντας όλες αυτές τις τεχνικές, θα γίνετε κύριος της σύνταξης του δικού σας XPath και θα είστε σε θέση να γράψετε killer XPaths με πολύ λίγες πιθανότητες να γίνετε άκυροι.
Αρχικά, ας αρχίσουμε με την κατανόηση της σύνταξης XPath και να ορίσουμε καθένα από τα μέρη της.
Η παρακάτω εικόνα θα δείξει πώς θα φαίνεται το XPath μαζί με μια περιγραφή κάθε μέρους:
- //: Επιλέξτε τον τρέχοντα κόμβο όπως είσοδο, div κ.λπ.
- Διάγραμμα: Το όνομα του στοιχείου / κόμβου ιστού
- @: Επιλέξτε χαρακτηριστικό
- Χαρακτηριστικό: Όνομα χαρακτηριστικού του κόμβου / συγκεκριμένου στοιχείου ιστού
- Αξία: Τιμή του χαρακτηριστικού
Θέλω απλώς να μοιραστώ μερικές συμβουλές εδώ ότι το 80% του χρόνου του σεναρίου δοκιμής αυτοματοποίησης απέτυχε λόγω του XPath. Αυτό οφείλεται είτε σε πολλά στοιχεία ιστού για το παρεχόμενο XPath είτε το XPath δεν είναι έγκυρο ή η σελίδα δεν έχει φορτωθεί ακόμα.
Έτσι, όποτε αποτυγχάνει η δοκιμαστική σας υπόθεση:
- Αντιγράψτε το XPath.
- Αναζητήστε το στο πρόγραμμα περιήγησης (F12 ή παράθυρο εργαλείου προγραμματιστή) στο DOM για να επαληθεύσετε εάν είναι έγκυρο ή όχι (Δείτε την παρακάτω εικόνα).
Pro Τύπος 1: Βεβαιωθείτε ότι είναι μοναδικό και ότι κανένα άλλο στοιχείο ιστού δεν εμφανίζεται όταν κάνετε αναζήτηση δύο φορές στο DOM.
Pro Τύπος 2: Μερικές φορές υπάρχει ένα πρόβλημα χρονισμού, που σημαίνει ότι το στοιχείο / η σελίδα ιστού σας δεν έχει φορτωθεί ακόμη, ενώ το σενάριο το αναζητούσε, επομένως προσθέστε λίγο χρόνο αναμονής και δοκιμάστε ξανά.
Pro Τύπος 3: Προσπαθήστε να εκτυπώσετε ολόκληρο το DOM πριν πραγματοποιήσετε αναζήτηση για το στοιχείο ιστού. Με αυτόν τον τρόπο μπορείτε να καταλάβετε κοιτάζοντας την Κονσόλα εάν το στοιχείο ιστού σας υπάρχει στο DOM ή όχι.
διεκδικούν () c ++
Πριν βυθίσουμε βαθιά την αναζήτηση XPath, ένα σημαντικό πράγμα που θέλω να μοιραστώ είναι ότι εάν έχετε άμεση πρόσβαση στην ομάδα ανάπτυξης ή εάν η ομάδα σας βρίσκεται εκεί που βρίσκεστε, ζητήστε από την ομάδα ανάπτυξης να σας παράσχει μοναδικά αναγνωριστικά στο κάθε στοιχείο ιστού ή τουλάχιστον αυτά που θέλετε να χρησιμοποιήσετε για Αυτοματισμό και αυτό θα εξοικονομήσει πολύ χρόνο.
Εάν δεν είναι αυτή η πιθανότητα, τότε ίσως χρειαστεί να χρησιμοποιήσετε τη δημιουργικότητά σας και να βρείτε τα δικά σας προσαρμοσμένα XPath και αυτό θα μάθουμε τώρα.
Κορυφαίοι 20 τρόποι για να γράψετε XPath για οποιοδήποτε στοιχείο Web
Ας δούμε βαθιά τη δημιουργία των κορυφαίων 20 τρόπων για ένα δολοφόνο XPath.
# 1) Αντίστροφη αναζήτηση
Ας υποθέσουμε ότι θέλετε να κάνετε κλικ σε ένα κουμπί και υπάρχει ένα παρόμοιο κουμπί. Και τα δύο κουμπιά έχουν χαρακτηριστικά ταυτότητας, αλλά είναι δυναμικά και κανένα από τα χαρακτηριστικά δεν είναι μοναδικό και στα δύο στοιχεία κουμπιού.
Στο παρακάτω σενάριο θέλουμε να κάνουμε κλικ στο κουμπί 'Ρύθμιση' του 'Test Interactive'.
Κώδικας
Αν κοιτάξετε τα κουμπιά 'Ρύθμιση', και οι δύο κωδικοί είναι παρόμοιοι. Χρησιμοποιώντας παραδοσιακούς τρόπους όπως αναγνωριστικό, όνομα, τιμή, περιέχει κ.λπ., κανένας από αυτούς δεν θα λειτουργήσει για παράδειγμα.
// * (περιέχει (κείμενο (), «Ρύθμιση»)), Αυτό θα έχει ως αποτέλεσμα δύο στοιχεία ιστού. Ως εκ τούτου, δεν είναι μοναδικό.
Ορίστε λοιπόν η τελική στρατηγική,
>> Πρώτον, Βρείτε την πλησιέστερη ετικέτα που είναι μοναδική και σε αυτήν την περίπτωση, είναι
XPATH: “//*(@id='rcTEST')
>> Δεύτερον, Βρείτε το πλησιέστερο στοιχείο ιστού στο επιδιωκόμενο στοιχείο ιστού το οποίο σε αυτήν την περίπτωση περιέχει (κείμενο (), «TEST Interactive»). Τώρα βρισκόμαστε στο ίδιο σημείο όπου υπάρχει το κουμπί «Ρύθμιση», αλλά για να κάνουμε κλικ σε αυτό, πρέπει πρώτα να πάμε στο κύριο χρησιμοποιώντας διπλές κουκκίδες όπως φαίνεται παρακάτω.
XPATH: “//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/..
>> Όπως μπορείτε να δείτε, είμαστε στο επίπεδο που έχει το δεύτερο στοιχείο ιστού ως το κουμπί «Ρύθμιση». Αυτό έχει δύο κουμπιά και θέλουμε να πάμε στο δεύτερο κουμπί που είναι το κουμπί «Ρύθμιση». Με την προσθήκη του «/ κουμπιού (2)» στο τέλος μπορούμε να πάρουμε το μοναδικό XPATH για το κουμπί «Ρύθμιση» όπως φαίνεται παρακάτω.
Τελικό XPATH:
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/../button(2)”
Εδώ είναι ένας άλλος τρόπος δημιουργίας, αν νομίζετε ότι ενδέχεται να αλλάξουν τον τύπο στοιχείου ιστού από 'κουμπί' σε κάτι άλλο.
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/..//*(contains(text(), 'Setting'))”
ή χρησιμοποιώντας το 'follow-sibling'
“//*(@id='rcTEST')//*(contains(text(), 'TEST Interactive'))/following-sibling::button”
# 2) Χρήση μεταβλητών και προσαρμοσμένων τιμών
Ας υποθέσουμε ότι υπάρχει μια εφαρμογή ιστού με δυνατότητα FTP ('File Transfer Protocol') για να ανεβάσετε / κατεβάσετε αρχεία και έχετε μια δοκιμαστική θήκη για να κατεβάσετε ένα συγκεκριμένο αρχείο κάνοντας κλικ στο σύνδεσμο λήψης.
Αρχικά, μπορούμε να ορίσουμε το όνομα του αρχείου που αναζητούμε ως μεταβλητή.
String waitingfileName = 'Δοκιμή1';
qa ερωτήσεις και απαντήσεις συνέντευξης αυτοματοποίησης
Τώρα χρησιμοποιώντας το XPATH μπορούμε να βρούμε το πραγματικό όνομα αρχείου.
“String actualFileName = WebDriverAccess.getDriver().findElement (By.xpath('//*'+fileName +'/tr/td(1)')).getAttribute('title');”
Στο παραπάνω XPath,… ‘/ tr / td (1) .getAttribute (“ title ”)» θα μεταβεί στη συγκεκριμένη σειρά και στην πρώτη στήλη και θα λάβει την τιμή του χαρακτηριστικού τίτλου. Μπορούμε να αποθηκεύσουμε το πραγματικό όνομα αρχείου σε άλλη μεταβλητή.
Μόλις έχουμε τόσο τα αναμενόμενα όσο και τα πραγματικά ονόματα αρχείων, μπορούμε να συγκρίνουμε και τα δύο και αν και τα δύο ταιριάζουν μπορούμε απλά να κάνουμε κλικ στον σύνδεσμο λήψης του.
(if acutalFileName == expectedFileName) { WebDriverAccess.getDriver().findElement(By.xpath('//*'+fileName +'/tr/td(4)')).click(); }
Μπορούμε επίσης να δημιουργήσουμε έναν βρόχο σε κάθε σειρά και να συνεχίσουμε να επαληθεύουμε το όνομα του αρχείου μέχρι να το βρείτε.
Loop(int count <30) { String actualFileName = WebDriverAccess. getDriver ().findElement (By. xpath ('//*'+acutalFileName +'/tr(' + count + ')/td(1)')).getAttribute('title'); (if acutalFileName == expectedFileName) { WebDriverAccess. getDriver ().findElement(By. xpath ('//*'+fileName +'/tr/td(4)')).click(); } Count++; }
Μπορούμε να δημιουργήσουμε μοναδικά XPATH χρησιμοποιώντας προσαρμοσμένες ετικέτες και να προσθέσουμε άλλες συνθήκες.
Για παράδειγμα, ας πούμε ότι το στοιχείο ιστού που προορίζουμε υπάρχει στην κύρια ετικέτα και υπάρχουν πολλές ετικέτες διευθύνσεων, αλλά θέλετε να βρείτε μόνο μια συγκεκριμένη. Όλες οι ετικέτες διευθύνσεων έχουν ένα χαρακτηριστικό κλάσης, επομένως μπορούμε να ξεκινήσουμε.
// address(@class='ng-scope ng-isolate-scope')
Παρατηρήσαμε ότι το επιδιωκόμενο στοιχείο ιστού βρίσκεται σε μια ετικέτα που έχει κάποιο κείμενο που ονομάζεται 'Δοκιμή'.
// address(@class='ng-scope ng-isolate-scope')//div(contains(.,'Testing')
Καταλήξαμε ότι υπάρχουν πολλά στοιχεία ιστού που βρέθηκαν ως αποτέλεσμα. Ως εκ τούτου, για να το κάνουμε πιο μοναδικό, μπορούμε να προσθέσουμε τις άλλες προϋποθέσεις όπως το 'id' που τελικά θα μας οδηγήσουν στο στοιχείο ιστού που ψάχνουμε.
// address(@class='ng-scope ng-isolate-scope')//div(contains(.,Testing') and @id='msgTitle')
# 4) Χρήση χαρακτηριστικών και πίνακα XPATH
Ας υποθέσουμε ότι θέλουμε να πληκτρολογήσουμε ένα στοιχείο ιστού που τοποθετείται μέσα σε έναν πίνακα και ο πίνακας τοποθετείται μέσα σε ένα στοιχείο φόρμας.
Μπορούμε να βρούμε όλες τις φόρμες μέσα στο DOM με το όνομα «myForm».
“//*(@name='myForm')”
Τώρα σε όλες τις φόρμες βρείτε τον πίνακα με το αναγνωριστικό «tbl_testdm».
'//*(@name='myForm')//table(@id='tbl_ testdm’)”
Μέσα στον πίνακα μεταβείτε σε μια συγκεκριμένη σειρά και στήλη.
'//*(@name='myForm')//table(@id='tbl_ testdm’)/tbody/tr/td(6)/”
Μέσα στο κελί, εάν υπάρχουν πολλές είσοδοι, τότε βρείτε μια είσοδο όπου η τιμή = 'Open RFS' και αυτό θα μας δώσει το τελικό XPath του πεδίου.
//*(@name='myForm')//table(@id='tbl_ testdm’)/tbody/tr/td(6)/ input(@value='Open RFS')'
# 5) Χρήση χαρακτηριστικών, πινάκων και κειμένου
Ας υποθέσουμε ότι το επιθυμητό στοιχείο ιστού βρίσκεται στον Πίνακα πίνακα και έχει κάποιο κοινό κείμενο.
Αρχικά ξεκινήστε με έναν πίνακα που έχει ένα μοναδικό χαρακτηριστικό που σε αυτήν την περίπτωση είναι 'TITLE'.
//*(@title=’Songs Lis Applet')
Τώρα πλοηγηθείτε σε όλες τις ετικέτες πίνακα.
//*(@title=’Songs Lis Applet')//table
Σε όλους τους πίνακες βρείτε τη στήλη με κείμενο «Συγγραφέας».
Το Final XPath θα ήταν σαν:
//*(@title=’Songs List Applet')//table//td(contains(text(),'Author'))
# 6) Δημιουργία XPATH χρησιμοποιώντας ένθετα χαρακτηριστικά
Το XPath του στοιχείου ιστού στόχευσης μπορεί επίσης να δημιουργηθεί χρησιμοποιώντας τα ένθετα χαρακτηριστικά. Για παράδειγμα, Σε αυτήν την περίπτωση, θα αναζητήσει ένα συγκεκριμένο χαρακτηριστικό στο DOM και στη συνέχεια θα αναζητήσει ένα άλλο χαρακτηριστικό μέσα σε αυτό.
//*(@id='parameters')//*(@id='testUpdateTime')')
# 7) Δημιουργία XPath συνδυάζοντας χαρακτηριστικά, διαιρέσεις και κουμπιά
Για παράδειγμα, στο XPath παρακάτω, μπόρεσα να βρω το στοιχείο web προορισμού χρησιμοποιώντας ένα αναγνωριστικό (σχετικό XPath), μερικές ετικέτες div και ένα κουμπί.
“//*(@id='MODEL/PLAN')/div(1)/div(2)/div(1)/div(1)/widget/section/div(1)/div/div(1)/div/div/button(1)'
# 8) Δημιουργία XPATH χρησιμοποιώντας ΠΕΡΙΕΧΟΜΕΝΑ, ΑΝΤΙΣΤΡΟΦΗ ΛΟΓΟΤΥΠΟ, κ.λπ.
Κάποτε είχα ένα αναπτυσσόμενο μενού χωρίς άμεση αναγνώριση. Έπρεπε να χρησιμοποιήσω τα CONTAINS, REVERSE, DIVs, χαρακτηριστικά για να βρω το τελικό XPATH όπως φαίνεται παρακάτω.
//*(contains(text(),'Watch Dial))/../div/select(@data-ng-model='context.questions (subqts.subHandleSubId)')'),
# 9) Δημιουργία XPath χρησιμοποιώντας Relative, CONTAINS, REVERSE, FOLLOW SIBLING κ.λπ.
Είχα μια κατάσταση όπου η εφαρμογή εμφανίζει ένα γράφημα και κάθε τιμή γραφήματος έπρεπε να επικυρωθεί. Αλλά, δυστυχώς, κάθε τιμή δεν είχε καμία μοναδική αναγνώριση, οπότε έχω βρει το τελικό XPATH όπως φαίνεται παρακάτω για μια τιμή γραφήματος που συνδυάζει σχετικές, περιέχει, αντίστροφη, ακολουθώντας-αδελφικές και div ετικέτες.
//*(@id='RESEARCH/PLAN')//*(contains(@id, 'A4'))/../../following-sibling::div(1)/div(1)/span(1)/span(1)
# 10) Δημιουργία XPath χρησιμοποιώντας χαρακτηριστικά, Περιέχει, Αντίστροφη, Προηγούμενη αδελφή, Divs και Span
Μόλις έπρεπε να επικυρώσω διαφορετικά δεδομένα συναγερμού και κάθε τιμή συναγερμού έχει εμφανιστεί με βάση έναν συγκεκριμένο υπολογισμό ή χρονισμούς. Για να καταγράψω κάθε τιμή, έπρεπε να βρω το παρακάτω XPATH που χρησιμοποιεί χαρακτηριστικά, περιέχει, αντίστροφη, προηγούμενη-αδελφή, divs και span tag.
//*(@id='ALARMDATA')//*(contains(@id, 'AFC2'))/../../preceding-sibling::div(1)/div(1)/span(1)/span(1)
# 11) Χρήση χαρακτηριστικών, ετικετών XML κ.λπ.
Στις παρακάτω ετικέτες XPATH, χαρακτηριστικά και XML, χρησιμοποιείται μια ακολουθία για την εμφάνιση της τελικής μοναδικής διεύθυνσης ενός στοιχείου ιστού.
//*(@id='RESEARCH/REVIEW') //widget/section/div(1)/div/div(2)/div(1)/div(3)/div(1)//span(@class='details')
# 12) Δημιουργία XPath με το να μην κοιτάζετε ολόκληρη τη σελίδα αλλά να εξετάζετε όλους τους συνδέσμους και να περιέχει
Το παρακάτω XPath θα αναζητούσε μόνο συνδέσμους σε ολόκληρη τη σελίδα που περιέχουν το κείμενο ως 'Παράμετρος Εγχειρίδιο εισαγωγής δεδομένων'.
//a(contains(.,'Parameter Data Manual Entry'))
# 13) Χρήση περιεχομένων και χαρακτηριστικών
//*(contains(@style,'display: block; top:'))//input(@name='daterangepicker_end')
# 14) Χρήση χαρακτηριστικών, ακολουθώντας αδέλφια και απογόνους
//*(@id='dropdown-filter-serviceTools')/following-sibling::ul/descendant::a(text()='Notepad')
# 15) Χρήση χαρακτηριστικών, ακολουθώντας αδέλφια, απογόνους και κείμενο
//*(@id='dropdown-filter-service tools') /following-sibling::ul/descendant::a(text()='Trigger Dashboard')
# 16) Χρήση κεφαλίδας και κειμένου
Εάν το στοιχείο ιστού είναι κεφαλίδα με συγκεκριμένο κείμενο, τότε το XPath θα μπορούσε να είναι όπως φαίνεται παρακάτω:
//h3(text()='Internal Debrief')
# 17) Χρήση κεφαλίδας κειμένου, ακολουθώντας αδέλφια, διαδρομή κ.λπ.
//h3(contains(text(),'Helium Level'))/following-sibling::div/label/input
# 18) Χρήση χαρακτηριστικών, περιεχομένων και προηγούμενων αδελφών
Μόλις είχα ένα εύρος που δεν είχε κανένα μοναδικό χαρακτηριστικό, είχα δημιουργήσει το XPATH συνδυάζοντας το απόλυτο, Περιέχει, προηγούμενα αδέλφια και ένα άλλο απόλυτο μονοπάτι.
//div(div(p(contains(text(),'Status'))))/preceding-sibling::div/div/span(3)/span
# 19) Αναζητώντας αναπτυσσόμενο μενού χρησιμοποιώντας το χαρακτηριστικό Id, κάποιο συγκεκριμένο κείμενο και Reverse Lookup
//*(@id='COUPLING')//*(contains(text(),'COUPLE Trend'))/../div/select
# 20) Συνδυασμός χαρακτηριστικού 'id' και αναζήτηση συνδέσμου με συγκεκριμένο κείμενο
//*(@id='ffaHeaderDropdown')//a(contains(text(),'Start Workflow'))
συμπέρασμα
Όταν πρόκειται για τη σύνταξη ενός δολοφόνου XPATH, εξαρτάται πραγματικά από το πόσο καλά καταλαβαίνετε και αναλύετε τον κώδικα. Όσο περισσότερο καταλαβαίνετε τον κωδικό, τόσο περισσότερος θα είναι ο αριθμός των τρόπων με τους οποίους θα βρείτε γραπτώς αποτελεσματικά XPATH.
Το πρώτο βήμα στη σύνταξη του XPath είναι να βρείτε το πλησιέστερο μοναδικό στοιχείο ιστού στο στοιχείο ιστού στόχου σας και να συνεχίσετε να πλησιάζετε χρησιμοποιώντας διαφορετικές τεχνικές που αναφέρθηκαν παραπάνω όπως χαρακτηριστικά, DIV, ακολουθώντας, περιέχει κ.λπ.
Στο τέλος, θα το πούμε ξανά ότι θα κάνει τη ζωή σας πιο εύκολη αν ζητήσετε από την ομάδα ανάπτυξης να προσθέσει μοναδικά αναγνωριστικά σε όλα τα στοιχεία ιστού που σας ενδιαφέρουν.
Κάθε φορά που ξεκινά ένας κύκλος σπριντ ή δουλεύετε σε νέα απαίτηση και η ομάδα μοιράζεται νέα mockups, πάντα περνάω όλα τα κοροϊδεύω και σκέφτομαι πιθανές δοκιμές αυτοματισμού στο μυαλό μου, προετοιμάζω μια λίστα με όλα τα πιθανά στοιχεία ιστού που θα χρησιμοποιηθούν σε δοκιμές αυτοματισμού και να ετοιμάσω τα δικά μου αναγνωριστικά.
Μόλις ολοκληρωθεί μια λίστα με όλα τα στοιχεία ιστού μαζί με τα προτεινόμενα αναγνωριστικά, θα το κοινοποιήσω στον προγραμματιστή εκ των προτέρων για χρήση στον κώδικα ανάπτυξης. Με αυτόν τον τρόπο, θα έπαιρνα πάντα μοναδικά αναγνωριστικά κάνοντας εύκολη τη μάχη γραφής XPATH.
Ακολουθεί μια συνδυασμένη λίστα διαφορετικών τρόπων για να γράψετε XPATH:
στο scrum ο οποίος είναι υπεύθυνος για την παράδοση πολύπλοκων απαιτήσεων εγκαίρως
- '// * (@ id = 'rcTEST') // * (περιέχει (κείμενο (),' TEST Interactive ')) /../ κουμπί (2)'
- '// * (@ id =' rcTEST ') // * (περιέχει (κείμενο (),' TEST Interactive ')) /..//* (περιέχει (κείμενο (),' Ρύθμιση '))'
- '// * (@ id =' rcTEST ') // * (περιέχει (κείμενο (),' TEST Interactive ')) / following-sibling :: κουμπί'
- 'String actualFileName = WebDriverAccess.getDriver (). FindElement (By.xpath (' // * '+ fileName +' / tr / td (1) ')). GetAttribute (' title ');'
- WebDriverAccess.getDriver (). FindElement (By.xpath ('// *' + fileName + '/ tr / td (4)')). Κάντε κλικ ();
- '// διεύθυνση (@ class = 'ng-lingkup ng-isolate-lingkup') // div (περιέχει (., Testing ') και @ id =' msgTitle ')'
- '// * (@ name =' myForm ') // πίνακας (@ id =' tbl_ testdm ') / tbody / tr / td (6) /
- input (@ value = «Άνοιγμα RFS») ”
- '// * (@ title = 'Applet List List') // table // td (περιέχει (κείμενο (),' Συγγραφέας '))'
- '// * (@ id = 'παράμετροι') // * (@ id = 'testUpdateTime')') '
- '// * (@ id = 'MODEL / PLAN') / div (1) / div (2) / div (1) / div (1) / widget / section / div (1) / div / div (1) / div / div / κουμπί (1) '
- '// * (περιέχει (κείμενο (),' Παρακολούθηση κλήσης)) /../ div / select (@ data-ng-model = 'context.questions (subqts.subHandleSubId) ')'), '
- '// * (@ id = 'ΕΡΕΥΝΑ / ΣΧΕΔΙΟ') // * (περιέχει (@id, 'A4')) /../../ following-sibling :: div (1) / div (1) / span (1) / span (1) '
- '// * (@ id = 'ALARMDATA') // * (περιέχει (@id, 'AFC2')) /../../ προηγούμενο-αδελφό :: div (1) / div (1) / span ( 1) / εύρος (1) '
- '// * (@ id = 'ΕΡΕΥΝΑ / ΕΡΕΥΝΑ') // widget / ενότητα / div (1) / div / div (2) / div (1) / div (3) / div (1) // span ( @ class = 'λεπτομέρειες') '
- '//A(contains(.,'Parameter Data Manual Entry '))'
- '// * (περιέχει (@ style, 'display: block; top:')) // input (@ name = 'daterangepicker_end')'
- '// * (@ id = 'dropdown-filter-serviceTools') / following-sibling :: ul / descant :: a (text () =' Σημειωματάριο ')'
- '// * (@ id = 'dropdown-filter-serviceTools') / following-sibling :: ul / descant :: a (text () =' Trigger Dashboard ')'
- '// h3 (text () =' Εσωτερική ενημέρωση ')'
- '// h3 (περιέχει (κείμενο (),' Επίπεδο ηλίου ')) / following-saudara :: div / label / input'
- '// div (div (p (περιέχει (κείμενο (),' Κατάσταση ')))) / προηγούμενο-αδελφό :: div / div / span (3) / span'
- '// * (@ id =' COUPLING ') // * (περιέχει (κείμενο (),' COUPLE Trend ')) /../ div / select'
- '// * (@ id =' ffaHeaderDropdown ') // a (περιέχει (κείμενο (),' Έναρξη ροής εργασίας '))'
Ελπίζω ότι αυτό το ενημερωτικό άρθρο θα εμπλουτίσει τις γνώσεις σας σχετικά με τη σύνταξη XPaths.
Συγγραφέας Βιογραφικό: Αυτό το άρθρο γράφτηκε από τον Adnan Arif επαγγελματία πληροφορικής που έχει διαφορετική εμπειρία και δεξιότητες στην καριέρα του, η οποία εκτείνεται σε διάστημα άνω των 9 ετών.
Συνιστώμενη ανάγνωση
- Εκμάθηση έκλειψης σε βάθος για αρχάριους
- Εκμάθηση Python DateTime με παραδείγματα
- Unix Cat Command Syntax, Επιλογές με παραδείγματα
- Unix Sort Command με Σύνταξη, Επιλογές και Παραδείγματα
- Unix Shell Scripting Tutorial με παραδείγματα
- Selenium Find Element By Text Tutorial με παραδείγματα
- Εκπαιδευτικό πρόγραμμα Python Main Function με πρακτικά παραδείγματα
- Xpath Extractor Post-Processor στο JMeter