Τρόπος χειρισμού iFrames στο Selenium Webdriver: switchTo ()

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

Anonim

iFrame στο Selenium Webdriver

Το iFrame στο Selenium Webdriver είναι μια ιστοσελίδα ή ένα ενσωματωμένο πλαίσιο που είναι ενσωματωμένο σε άλλη ιστοσελίδα ή ένα έγγραφο HTML ενσωματωμένο σε άλλο έγγραφο HTML. Το iframe χρησιμοποιείται συχνά για την προσθήκη περιεχομένου από άλλες πηγές, όπως μια διαφήμιση σε μια ιστοσελίδα. Το iframe ορίζεται με την ετικέτα < iframe >.

Σε αυτό το σεμινάριο, θα μάθετε -

  1. Πώς να προσδιορίσετε το iframe:
  2. Πώς αλλάζετε τα στοιχεία σε iframe χρησιμοποιώντας εντολές προγράμματος οδήγησης Web:
  3. Έννοια των ένθετων πλαισίων (πλαίσια εντός πλαισίων):

Πώς να προσδιορίσετε το iframe:

Δεν μπορούμε να εντοπίσουμε τα καρέ μόνο βλέποντας τη σελίδα ή ελέγχοντας το Firebug.

Παρατηρήστε την παρακάτω εικόνα, η διαφήμιση που εμφανίζεται είναι ένα Iframe, δεν μπορούμε να το εντοπίσουμε ή να το αναγνωρίσουμε με την απλή επιθεώρηση χρησιμοποιώντας το Firebug. Έτσι, το ερώτημα είναι πώς μπορείτε να προσδιορίσετε το iframe;

Πώς να προσδιορίσετε το iframe χρησιμοποιώντας το Selenium WebDriver

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

  • Κάντε δεξί κλικ στο στοιχείο, Αν βρείτε την επιλογή όπως "Αυτό το πλαίσιο" τότε είναι ένα iframe. (Ανατρέξτε στο παραπάνω διάγραμμα)
  • Κάντε δεξί κλικ στη σελίδα και κάντε κλικ στην επιλογή "Προβολή πηγής σελίδας" και κάντε αναζήτηση με το "iframe", εάν μπορείτε να βρείτε οποιοδήποτε όνομα ετικέτας με το "iframe", τότε σημαίνει ότι η σελίδα αποτελείται από ένα iframe.

Στο παραπάνω διάγραμμα, μπορείτε να δείτε ότι η επιλογή " Αυτό το πλαίσιο " είναι διαθέσιμη με δεξί κλικ, οπότε είμαστε πλέον σίγουροι ότι είναι ένα iframe.

Μπορούμε ακόμη και να προσδιορίσουμε τον συνολικό αριθμό iframe χρησιμοποιώντας το παρακάτω απόσπασμα.

Int size = driver.findElements (By.tagName ("iframe")). Μέγεθος ();

Πώς να αλλάξετε τα στοιχεία σε iframe χρησιμοποιώντας εντολές προγράμματος οδήγησης Web:

Βασικά, μπορούμε να αλλάξουμε τα στοιχεία και να χειριστούμε τα πλαίσια στο Σελήνιο χρησιμοποιώντας 3 τρόπους.

  • Κατά ευρετήριο
  • Ανά όνομα ή αναγνωριστικό
  • Από Στοιχείο Ιστού

Μετάβαση στο καρέ ανά ευρετήριο:

Το ευρετήριο είναι ένα από τα χαρακτηριστικά για το χειρισμό πλαισίων στο Σελήνιο μέσω του οποίου μπορούμε να στραφούμε σε αυτό.

Το ευρετήριο του iframe ξεκινά με '0'.

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

  • driver.switchTo (). πλαίσιο (0);
  • driver.switchTo (). πλαίσιο (1);

Εναλλαγή στο πλαίσιο με όνομα ή αναγνωριστικό:

Το όνομα και το αναγνωριστικό είναι χαρακτηριστικά για το χειρισμό πλαισίων στο Selenium μέσω των οποίων μπορούμε να μεταβούμε στο iframe.

  • driver.switchTo (). πλαίσιο ("iframe1");
  • driver.switchTo (). frame ("id του στοιχείου");

Παράδειγμα εναλλαγής σε iframe μέσω ID:

Ας πάρουμε ένα παράδειγμα για να αλλάξετε το πλαίσιο στο Σελήνιο που εμφανίζεται στην παρακάτω εικόνα. Η απαίτησή μας είναι να κάνουμε κλικ στο iframe.

Μπορούμε να αποκτήσουμε πρόσβαση σε αυτό το iframe μέσω αυτής της παρακάτω διεύθυνσης URL: http: //demo.guru99.com/test/guru99home/

Είναι αδύνατο να κάνετε κλικ στο iframe απευθείας μέσω του XPath, καθώς είναι ένα iframe. Πρώτα πρέπει να μεταβούμε στο πλαίσιο και μετά μπορούμε να κάνουμε κλικ χρησιμοποιώντας το xpath.

Βήμα 1)

Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). μεγιστοποίηση ();
  • Αρχικοποιούμε το πρόγραμμα οδήγησης του Firefox.
  • Μεταβείτε στον ιστότοπο "guru99" που αποτελείται από το iframe.
  • Μεγιστοποίησε το παράθυρο.

Βήμα 2)

driver.switchTo (). πλαίσιο ("a077aa5e");
  • Σε αυτό το βήμα πρέπει να μάθουμε το αναγνωριστικό του iframe ελέγχοντας μέσω του Firebug.
  • Στη συνέχεια, μεταβείτε στο iframe μέσω ID.

Βήμα 3)

driver.findElement (By.xpath ("html / body / a / img")). κάντε κλικ ();
  • Εδώ πρέπει να μάθουμε το xpath του στοιχείου που πρέπει να κάνουμε κλικ.
  • Κάντε κλικ στο στοιχείο χρησιμοποιώντας την εντολή προγράμματος οδήγησης ιστού που εμφανίζεται παραπάνω.

Εδώ είναι ο πλήρης κωδικός:

δημόσια τάξη SwitchToFrame_ID {Δημόσιο στατικό κενό (String [] args) {Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver (); // μεταβαίνει στο πρόγραμμα περιήγησηςdriver.get ("http://demo.guru99.com/test/guru99home/");// μεταβαίνει στη σελίδα που αποτελείται από ένα iframedriver.manage (). window (). μεγιστοποίηση ();driver.switchTo (). πλαίσιο ("a077aa5e"); // εναλλαγή του πλαισίου κατά IDSystem.out.println ("******** Μετάβαση στο iframe *******");driver.findElement (By.xpath ("html / body / a / img")). κάντε κλικ ();// Κάντε κλικ στο iframeSystem.out.println ("********* Έχουμε τελειώσει ***************");}}

Παραγωγή:

Το πρόγραμμα περιήγησης μεταβαίνει στη σελίδα που αποτελείται από το παραπάνω iframe και κάνει κλικ στο iframe.

Εναλλαγή στο πλαίσιο κατά Web Element:

Μπορούμε ακόμη και να μεταβούμε στο iframe χρησιμοποιώντας στοιχείο ιστού.

  • driver.switchTo (). πλαίσιο (WebElement);

Πώς να επιστρέψετε στο κύριο πλαίσιο

Πρέπει να βγούμε από το iframe.

Για να επιστρέψετε στο γονικό πλαίσιο, μπορείτε είτε να χρησιμοποιήσετε το switchTo (). ParentFrame () ή εάν θέλετε να επιστρέψετε στο κύριο (ή το μεγαλύτερο γονικό) πλαίσιο, μπορείτε να χρησιμοποιήσετε το switchTo (). DefaultContent ();

driver.switchTo (). parentFrame ();driver.switchTo (). defaultContent ();

Πώς να αλλάξετε το πλαίσιο, αν ΔΕΝ ΜΠΟΡΟΥΜΕ να αλλάξουμε χρησιμοποιώντας το ID ή το Στοιχείο Web:

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

Η λύση για την παραπάνω ανησυχία είναι ότι πρέπει να βρούμε το ευρετήριο του iframe μέσω του οποίου φορτώνεται το στοιχείο και έπειτα πρέπει να στραφούμε στο iframe μέσω του ευρετηρίου.

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

Βήμα 1)

Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). μεγιστοποίηση ();
  • Αρχικοποιήστε το πρόγραμμα οδήγησης του Firefox.
  • Μεταβείτε στον ιστότοπο "guru99" που αποτελείται από το iframe.
  • Μεγιστοποίησε το παράθυρο.

Βήμα 2)

int size = driver.findElements (By.tagName ("iframe")). μέγεθος ();
  • Ο παραπάνω κώδικας βρίσκει τον συνολικό αριθμό των iframe που υπάρχουν μέσα στη σελίδα χρησιμοποιώντας το όνομα tag iframe.

Βήμα 3)

Στόχος για αυτό το βήμα θα ήταν η εύρεση του ευρετηρίου του iframe.

για (int i = 0; i <= size; i ++) {driver.switchTo (). πλαίσιο (i);int total = driver.findElements (By.xpath ("html / body / a / img")). μέγεθος ();System.out.println (σύνολο);driver.switchTo (). defaultContent ();}

Πάνω από το "forloop" επαναλαμβάνει όλα τα iframe στη σελίδα και εκτυπώνει '1' εάν το απαιτούμενο iframe μας βρέθηκε αλλιώς επιστρέφει '0'.

Εδώ είναι ο πλήρης κωδικός μέχρι το βήμα 3:

δημόσια τάξη IndexOfIframe {Δημόσιο στατικό κενό (String [] args) {Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). μεγιστοποίηση ();//driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). μέγεθος ();για (int i = 0; i <= size; i ++) {driver.switchTo (). πλαίσιο (i);int total = driver.findElements (By.xpath ("html / body / a / img")). μέγεθος ();System.out.println (σύνολο);driver.switchTo (). defaultContent ();}}}

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

Παραγωγή:

100000
Επαληθεύστε την έξοδο, μπορείτε να βρείτε τη σειρά των 0 και 1.
  • Όπου βρίσκετε την έξοδο «1» που είναι ο δείκτης του πλαισίου με το οποίο φορτώνεται το στοιχείο.
  • Δεδομένου ότι ο δείκτης του iframe ξεκινά με «0» αν βρείτε το 1 στο 1 st θέση, τότε ο δείκτης είναι 0.
  • Αν βρείτε 1 σε 3 rd θέση, ο δείκτης είναι 2.
Μπορούμε να σχολιάσουμε το for loop, μόλις βρούμε το ευρετήριο. Βήμα 4)
driver.switchTo (). πλαίσιο (0); 
  • Μόλις βρείτε το ευρετήριο του στοιχείου, μπορείτε να αλλάξετε το πλαίσιο χρησιμοποιώντας την παραπάνω εντολή.
  • driver.switchTo (). frame (ευρετήριο βρέθηκε από το Βήμα 3);
Βήμα 5)
driver.findElement (By.xpath ("html / body / a / img")). κάντε κλικ ();
  • Ο παραπάνω κώδικας θα κάνει κλικ στο iframe ή στο στοιχείο στο iframe.
Έτσι, ο πλήρης κωδικός θα είναι όπως παρακάτω:
δημόσια τάξη SwitchToframe {δημόσιος στατικός κενός κενός (String [] args) ρίχνει NoSuchElementException {Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get ("http://demo.guru99.com/test/guru99home/");driver.manage (). window (). μεγιστοποίηση ();// int size = driver.findElements (By.tagName ("iframe")). μέγεθος ();/ * για (int i = 0; i <= size; i ++) {driver.switchTo (). πλαίσιο (i);int total = driver.findElements (By.xpath ("html / body / a / img")). μέγεθος ();System.out.println (σύνολο);driver.switchTo (). defaultContent (); // μετάβαση από το iframe} * /// Σχολίασε τον κώδικα για την εύρεση του ευρετηρίου του στοιχείουdriver.switchTo (). πλαίσιο (0); // Μετάβαση στο πλαίσιοSystem.out.println ("******** Μετάβαση στο iframe *******");driver.findElement (By.xpath ("html / body / a / img")). κάντε κλικ ();// Κάνοντας κλικ στο στοιχείο σύμφωνα με τη διαφήμισηSystem.out.println ("********* Έχουμε τελειώσει ***************");}}
Έξοδος: Το πρόγραμμα περιήγησης μεταβαίνει στη σελίδα που αποτελείται από το παραπάνω iframe και κάνει κλικ στο iframe.

Έννοια των ένθετων πλαισίων (πλαίσια εντός πλαισίων)

Ας υποθέσουμε ότι υπάρχουν δύο πλαίσια το ένα μέσα στο άλλο, όπως φαίνεται στην παρακάτω εικόνα και η απαίτησή μας είναι η εκτύπωση του κειμένου στο εξωτερικό πλαίσιο και στο εσωτερικό πλαίσιο. Στην περίπτωση ένθετων πλαισίων,
  • Αρχικά πρέπει να μεταβούμε στο εξωτερικό πλαίσιο είτε με ευρετήριο είτε με αναγνωριστικό του iframe
  • Μόλις μεταβούμε στο εξωτερικό πλαίσιο, μπορούμε να βρούμε τον συνολικό αριθμό iframe μέσα στο εξωτερικό πλαίσιο, και
  • Μπορούμε να μεταβούμε στο εσωτερικό πλαίσιο με οποιαδήποτε από τις γνωστές μεθόδους.
Ενώ βγαίνουμε έξω από το πλαίσιο, πρέπει να βγούμε έξω με την ίδια σειρά όπως μπήκαμε σε αυτό από το εσωτερικό πλαίσιο πρώτα και μετά από το εξωτερικό πλαίσιο.
Ένθετα iFrames στο Selenium WebDriver

Ο κωδικός Html για το παραπάνω ένθετο πλαίσιο είναι όπως φαίνεται παρακάτω.

Ο παραπάνω κώδικας HTML εξηγεί με σαφήνεια την ετικέτα iframe (επισημαίνεται με πράσινο χρώμα) σε μια άλλη ετικέτα iframe, υποδεικνύοντας την παρουσία ένθετων iframe.

Ακολουθούν τα βήματα για τη μετάβαση στο εξωτερικό πλαίσιο και την εκτύπωση του κειμένου σε εξωτερικά πλαίσια: Βήμα 1)

Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get ("Url");driver.manage (). window (). μεγιστοποίηση ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). μέγεθος ();System.out.println ("Σύνολο καρέ -" + μέγεθος);// εκτυπώνει τον συνολικό αριθμό καρέdriver.switchTo (). πλαίσιο (0); // Εναλλαγή του εξωτερικού πλαισίουSystem.out.println (driver.findElement (By.xpath ("xpath του εξωτερικού στοιχείου")). GetText ()); 
  • Μεταβείτε στο εξωτερικό πλαίσιο.
  • Εκτυπώνει το κείμενο στο εξωτερικό πλαίσιο.

Μόλις μεταβούμε στο εξωτερικό πλαίσιο, θα πρέπει να γνωρίζουμε εάν υπάρχει κάποιο εσωτερικό πλαίσιο μέσα στο εξωτερικό πλαίσιο

Βήμα 2)

size = driver.findElements (By.tagName ("iframe")). μέγεθος ();// εκτυπώνει τον συνολικό αριθμό πλαισίων στο εξωτερικό πλαίσιοSystem.out.println ("Σύνολο καρέ -" + μέγεθος);
  • Βρίσκει τον συνολικό αριθμό iframe στο εξωτερικό πλαίσιο.
  • Εάν το μέγεθος βρέθηκε «0», τότε δεν υπάρχει εσωτερικό πλαίσιο μέσα στο πλαίσιο.
Βήμα 3)
driver.switchTo (). πλαίσιο (0); // Μετάβαση σε εσωτερικό πλαίσιοSystem.out.println (driver.findElement (By.xpath ("xpath του εσωτερικού στοιχείου")). GetText ());
  • Μεταβείτε στο εσωτερικό πλαίσιο
  • Εκτυπώνει το κείμενο στο εσωτερικό πλαίσιο.
Εδώ είναι ο πλήρης κωδικός:
δημόσια τάξη FramesInsideFrames {Δημόσιο στατικό κενό (String [] args) {Πρόγραμμα οδήγησης WebDriver = νέο FirefoxDriver ();driver.get ("Url");driver.manage (). window (). μεγιστοποίηση ();driver.manage (). timeouts (). implicitlyWait (2, TimeUnit.SECONDS);int size = driver.findElements (By.tagName ("iframe")). μέγεθος ();System.out.println ("Σύνολο καρέ -" + μέγεθος);// εκτυπώνει τον συνολικό αριθμό καρέdriver.switchTo (). πλαίσιο (0); // Εναλλαγή του εξωτερικού πλαισίουSystem.out.println (driver.findElement (By.xpath ("xpath του εξωτερικού στοιχείου")). GetText ());// Εκτύπωση του κειμένου σε εξωτερικό πλαίσιοsize = driver.findElements (By.tagName ("iframe")). μέγεθος ();// εκτυπώνει τον συνολικό αριθμό πλαισίων στο εξωτερικό πλαίσιοSystem.out.println ("Σύνολο καρέ -" + μέγεθος);driver.switchTo (). πλαίσιο (0); // Μετάβαση σε εσωτερικό πλαίσιοSystem.out.println (driver.findElement (By.xpath ("xpath του εσωτερικού στοιχείου")). GetText ());// Εκτύπωση του κειμένου στο εσωτερικό πλαίσιοdriver.switchTo (). defaultContent ();}}
Έξοδος : Η έξοδος του παραπάνω κώδικα θα εκτυπώσει το κείμενο στο εσωτερικό πλαίσιο και στο εξωτερικό πλαίσιο.