Πώς να βρείτε όλους / σπασμένους συνδέσμους χρησιμοποιώντας το Selenium Webdriver

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

Anonim

Τι είναι οι σπασμένοι σύνδεσμοι;

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

Μια διεύθυνση URL θα έχει πάντα μια κατάσταση με 2xx που είναι έγκυρη. Υπάρχουν διαφορετικοί κωδικοί κατάστασης HTTP που έχουν διαφορετικούς σκοπούς. Για μη έγκυρο αίτημα, η κατάσταση HTTP είναι 4xx και 5xx.

Η κλάση κωδικού κατάστασης 4xx αφορά κυρίως σφάλμα στην πλευρά του πελάτη και η κατηγορία κωδικών κατάστασης 5xx αφορά κυρίως το σφάλμα απόκρισης διακομιστή.

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

Γιατί πρέπει να ελέγξετε τους σπασμένους συνδέσμους;

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

Το σφάλμα συμβαίνει εάν οι κανόνες δεν ενημερώνονται σωστά ή οι πόροι που ζητούνται δεν υπάρχουν στον διακομιστή.

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

Ένα σενάριο αυτοματισμού που χρησιμοποιεί Selenium που θα αυτοματοποιήσει τη διαδικασία είναι μια πιο κατάλληλη λύση.

Πώς να ελέγξετε τους σπασμένους συνδέσμους και τις εικόνες

Για τον έλεγχο των σπασμένων συνδέσμων, θα πρέπει να κάνετε τα ακόλουθα βήματα.

  1. Συλλέξτε όλους τους συνδέσμους στην ιστοσελίδα με βάση την ετικέτα .
  2. Στείλτε αίτημα HTTP για το σύνδεσμο και διαβάστε τον κωδικό απόκρισης HTTP.
  3. Μάθετε αν ο σύνδεσμος είναι έγκυρος ή σπασμένος με βάση τον κωδικό απόκρισης HTTP.
  4. Επαναλάβετε αυτό για όλους τους συνδέσμους που έχουν ληφθεί.

Κωδικός για να βρείτε τους σπασμένους συνδέσμους σε μια ιστοσελίδα

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

αυτοματοποίηση πακέτωνεισαγωγή java.io.IOException;εισαγωγή java.net.HttpURLConnection;εισαγωγή java.net.MalformedURLException;εισαγωγή java.net.URL;εισαγωγή java.util.Iterator;εισαγωγή java.util.List;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;δημόσια τάξη BrokenLinks {ιδιωτικό στατικό πρόγραμμα οδήγησης WebDriver = null;Δημόσιο στατικό κενό (String [] args) {// TODO Αυτόματο δημιουργημένο στέλεχος μεθόδουString homePage = "http://www.zlti.com";String url = "";HttpURLConnection huc = null;int respCode = 200;πρόγραμμα οδήγησης = νέο ChromeDriver ();driver.manage (). window (). μεγιστοποίηση ();driver.get (αρχική σελίδα);Λίστα  links = driver.findElements (By.tagName ("a"));Iterator  it = links.iterator ();ενώ (it.hasNext ()) {url = it.next (). getAttribute ("href");System.out.println (url);αν (url == null || url.isEmpty ()) {System.out.println ("Η διεύθυνση URL δεν έχει διαμορφωθεί για ετικέτα αγκύρωσης ή είναι κενή");να συνεχίσει;}εάν (! url.startsWith (αρχική σελίδα)) {System.out.println ("Η διεύθυνση URL ανήκει σε άλλο τομέα, παραλείποντάς την.");να συνεχίσει;}προσπαθήστε {huc = (HttpURLConnection) (νέα διεύθυνση URL (url) .openConnection ());huc.setRequestMethod ("HEAD");huc.connect ();respCode = huc.getResponseCode ();εάν (respCode> = 400) {System.out.println (το url + "είναι ένας σπασμένος σύνδεσμος");}αλλού{System.out.println (το url + "είναι ένας έγκυρος σύνδεσμος");}} catch (MalformedURLException ε) {// TODO Αυτόματο δημιουργημένο μπλοκ σύλληψηςe.printStackTrace ();} αλίευση (IOException e) {// TODO Αυτόματο δημιουργημένο μπλοκ σύλληψηςe.printStackTrace ();}}driver.quit ();}}

Εξηγώντας τον κωδικό Παράδειγμα

Βήμα 1: Εισαγωγή πακέτων

Εισαγωγή παρακάτω πακέτου εκτός από τα προεπιλεγμένα πακέτα:

εισαγωγή java.net.HttpURLConnection;

Χρησιμοποιώντας τις μεθόδους σε αυτό το πακέτο, μπορούμε να στείλουμε αιτήματα HTTP και να καταγράφουμε κωδικούς απόκρισης HTTP από την απόκριση.

Βήμα 2: Συλλέξτε όλους τους συνδέσμους στην ιστοσελίδα

Προσδιορίστε όλους τους συνδέσμους σε μια ιστοσελίδα και αποθηκεύστε τους στη Λίστα.

Λίστα  links = driver.findElements (By.tagName ("a"));

Αποκτήστε το Iterator για να διασχίσετε τη λίστα.

Iterator  it = links.iterator ();

Βήμα 3: Αναγνώριση και επικύρωση διεύθυνσης URL

Σε αυτό το μέρος, θα ελέγξουμε εάν η διεύθυνση URL ανήκει σε τομέα τρίτου μέρους ή εάν η διεύθυνση URL είναι κενή / μηδενική.

Λάβετε href της ετικέτας αγκύρωσης και αποθηκεύστε τη στη μεταβλητή url.

url = it.next (). getAttribute ("href");

Ελέγξτε εάν η διεύθυνση URL είναι μηδενική ή κενή και παραλείψτε τα υπόλοιπα βήματα εάν πληρούται η συνθήκη.

αν (url == null || url.isEmpty ()) {System.out.println ("Η διεύθυνση URL δεν έχει διαμορφωθεί για ετικέτα αγκύρωσης ή είναι κενή");να συνεχίσει;}

Ελέγξτε αν η διεύθυνση URL ανήκει σε κύριο τομέα ή τρίτο μέρος. Παραλείψτε τα υπόλοιπα βήματα εάν ανήκει σε τομέα τρίτου μέρους.

 εάν (! url.startsWith (αρχική σελίδα)) {System.out.println ("Η διεύθυνση URL ανήκει σε άλλο τομέα, παραλείποντάς την.");να συνεχίσει;}

Βήμα 4: Αποστολή αιτήματος http

Η κλάση HttpURLConnection έχει μεθόδους για την αποστολή αιτήματος HTTP και τη λήψη κωδικού απόκρισης HTTP. Έτσι, η έξοδος της μεθόδου openConnection () (URLConnection) μεταδίδεται σε HttpURLConnection.

huc = (HttpURLConnection) (νέα διεύθυνση URL (url) .openConnection ());

Μπορούμε να ορίσουμε τον τύπο αιτήματος ως "HEAD" αντί για "GET". Έτσι, επιστρέφονται μόνο κεφαλίδες και όχι σώμα εγγράφου.

huc.setRequestMethod ("HEAD");

Κατά την επίκληση της μεθόδου connect (), πραγματοποιείται πραγματική σύνδεση στο url και αποστέλλεται το αίτημα.

huc.connect ();

Βήμα 5: Επικύρωση συνδέσμων

Χρησιμοποιώντας τη μέθοδο getResponseCode () μπορούμε να λάβουμε κωδικό απόκρισης για το αίτημα

respCode = huc.getResponseCode ();

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

εάν (respCode> = 400) {System.out.println (το url + "είναι ένας σπασμένος σύνδεσμος");}αλλού{System.out.println (το url + "είναι ένας έγκυρος σύνδεσμος");}

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

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

Πώς να λάβετε ΟΛΟΥΣ τους συνδέσμους μιας ιστοσελίδας

Μία από τις κοινές διαδικασίες στο Web Testing είναι να ελέγξετε εάν λειτουργούν όλοι οι σύνδεσμοι που υπάρχουν στη σελίδα. Αυτό μπορεί να γίνει εύκολα χρησιμοποιώντας έναν συνδυασμό της μεθόδου Java για κάθε βρόχο , findElements () & By.tagName ("a") .

Η μέθοδος findElements (), επιστρέφει μια λίστα στοιχείων Web με ετικέτα Χρησιμοποιώντας ένα για κάθε βρόχο, κάθε στοιχείο έχει πρόσβαση.

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

εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή java.util.List;εισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium. *;δημόσια τάξη P1 {Δημόσιο στατικό κενό (String [] args) {String baseUrl = "http://demo.guru99.com/test/newtours/";System.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver ();String underConsTitle = "Υπό κατασκευή: Mercury Tours";driver.manage (). timeouts (). implicitlyWait (5, TimeUnit.SECONDS);driver.get (baseUrl);Λίστα  linkElements = driver.findElements (By.tagName ("a"));String [] linkTexts = new String [linkElements.size ()];int i = 0;// εξαγάγετε τα κείμενα συνδέσμου κάθε στοιχείου συνδέσμουγια (WebElement e: linkElements) {linkTexts [i] = e.getText ();i ++;}// δοκιμάστε κάθε σύνδεσμογια (συμβολοσειρά t: linkTexts) {driver.findElement (By.linkText (t)). κάντε κλικ στο ();εάν (driver.getTitle (). ισούται με (underConsTitle)) {System.out.println ("\" "+ t +" \ ""+ "είναι υπό κατασκευή.");} αλλιώς {System.out.println ("\" "+ t +" \ ""+ "λειτουργεί.");}driver.navigate (). πίσω ();}driver.quit ();}}

Η έξοδος πρέπει να είναι παρόμοια με αυτήν που αναφέρεται παρακάτω.

  • Η πρόσβαση στους συνδέσμους εικόνας γίνεται με τις μεθόδους By.cssSelector () και By.xpath ().
  • Αντιμετώπιση προβλημάτων

    Σε μεμονωμένη περίπτωση, ο πρώτος σύνδεσμος στον οποίο έχει πρόσβαση ο κωδικός θα μπορούσε να είναι ο σύνδεσμος "Αρχική σελίδα" Σε αυτήν την περίπτωση, η ενέργεια driver.navigate.back () θα εμφανίσει μια κενή σελίδα καθώς η 1η ενέργεια ανοίγει ένα πρόγραμμα περιήγησης. Το πρόγραμμα οδήγησης δεν θα μπορεί να βρει όλους τους άλλους συνδέσμους σε ένα κενό πρόγραμμα περιήγησης. Έτσι το IDE θα ρίξει μια εξαίρεση και ο υπόλοιπος κώδικας δεν θα εκτελεστεί. Αυτό μπορεί να αντιμετωπιστεί εύκολα χρησιμοποιώντας ένα βρόχο If.