Back to Question Center
0

Αναβαθμίστε το έργο σας με τον επιλογέα CSS και τα προσαρμοσμένα χαρακτηριστικά            Αναβάθμιση του έργου σας με τον επιλογέα CSS και προσαρμοσμένα χαρακτηριστικά Σχετικά θέματα: CSSWeb Semalt

1 answers:
Αναβάθμιση του έργου σας με τον επιλογέα CSS και τα προσαρμοσμένα χαρακτηριστικά

Το άρθρο αυτό δημοσιεύθηκε αρχικά από το TestProject. Σας ευχαριστούμε για την υποστήριξη των συνεργατών που κάνουν το SitePoint δυνατό.

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

Επιλογείς στοιχείων σεληνίου

Η επιλογή της στρατηγικής επιλογής καλύτερων στοιχείων είναι κρίσιμη για την επιτυχία και την ευκολία συντήρησης της προσπάθειας αυτοματοποίησης - betfair first deposit bonus code. Επομένως, όταν επιλέγετε τον επιλογέα σας, θα πρέπει να εξετάσετε πτυχές όπως η ευκολία χρήσης, η ευελιξία, η ηλεκτρονική υποστήριξη, η τεκμηρίωση και η απόδοση. Η εξομάλυνση για μια σωστή στρατηγική επιλογής θα καταβάλει μερίσματα στο μέλλον μέσω της εύκολης συντήρησης του αυτοματισμού.

Ακριβώς όπως πρέπει να εξεταστεί η τεχνολογική πτυχή των επιλογέων στοιχείων, τόσο η κουλτούρα του οργανισμού σας. Μια ώριμη κουλτούρα συνεργασίας μεταξύ προγραμματιστών και QA θα ξεκλειδώσει τις υψηλές βαθμίδες επιτυχίας κατά την εφαρμογή των επιλογέων στοιχείων στον αυτοματισμό σας. Αυτό ωφελεί την οργάνωση πέρα ​​από την απλή προσπάθεια αυτοματισμού, θέτοντας τα θεμέλια για συνεργασία σε άλλους τομείς του Κύκλου Ζωής Ανάπτυξης Λογισμικού.

Όλα τα παραδείγματα κώδικα θα είναι σε εντολές Python και Selenium Semalt, αλλά θα πρέπει γενικά να εφαρμόζονται σε οποιαδήποτε γλώσσα και πλαίσιο προγραμματισμού.

Παράδειγμα HTML:

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

            

Κακό: Όνομα ετικέτας, κείμενο συνδέσμου, κείμενο και όνομα μερικής σύνδεσης

Δεν θα ξοδέψω πολύς χρόνος για αυτά, επειδή όλοι έχουν περιορισμένη χρήση. Γενικά δεν είναι μια καλή επιλογή για ευρεία υιοθέτηση σε ολόκληρο το πλαίσιο αυτοματισμού. Αντιμετωπίζουν ειδικές ανάγκες που μπορούν εύκολα να καλυφθούν με άλλες στρατηγικές επιλογής στοιχείων. Χρησιμοποιήστε τα μόνο αν έχετε μια συγκεκριμένη ανάγκη να χειριστείτε μια ειδική περίπτωση. Ακόμα και τότε, οι περισσότερες ειδικές περιπτώσεις δεν είναι αρκετά ειδικές για να τις χρησιμοποιήσουν. Θα χρησιμοποιούσατε αυτά σε ένα σενάριο όπου δεν υπάρχει άλλη επιλογή επιλογέα διαθέσιμη σε εσάς (όπως προσαρμοσμένες ετικέτες ή id).

Παράδειγμα:

Με το όνομα της ετικέτας, μπορείτε να επιλέξετε μεγάλες ομάδες στοιχείων που ταιριάζουν με το όνομα της ετικέτας που δώσατε. Αυτό έχει περιορισμένη χρήση επειδή θα λειτουργούσε μόνο ως λύση σε καταστάσεις όπου πρέπει να επιλέξετε μεγάλες ομάδες στοιχείων του ίδιου τύπου. Το παρακάτω παράδειγμα θα επέστρεφε και τα 4 στοιχεία div στο παράδειγμα HTML.

     οδηγού. find_elements (By TAG_NAME, "div")     

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

     οδηγού. find_elements (Μέσω LINK_TEXT, "Αρχική σελίδα")οδηγός. find_elements (Από PARTIAL_LINK_TEXT, "Sprock")     

Semalt, μπορείτε να επιλέξετε στοιχεία με το χαρακτηριστικό όνομα, αλλά όπως μπορείτε να δείτε στο παράδειγμα HTML, δεν υπάρχουν ετικέτες με ένα χαρακτηριστικό όνομα. Αυτό θα ήταν ένα κοινό πρόβλημα σε σχεδόν οποιαδήποτε εφαρμογή, δεδομένου ότι η προσθήκη ενός χαρακτηριστικού ονόματος σε κάθε χαρακτηριστικό HTML δεν είναι συνηθισμένη πρακτική. Εάν το στοιχείο του κύριου μενού είχε ένα χαρακτηριστικό όνομα όπως αυτό:

        

Θα μπορούσατε να το επιλέξετε ως εξής:

     οδηγού. find_elements (Με. Οι προσεγγίσεις που ακολουθούν είναι όλες οι καλύτερες προσεγγίσεις, επειδή είναι πολύ πιο ευέλικτες και ικανές.  

Περίληψη: Όνομα ετικέτας, κείμενο συνδέσμου, μερικό κείμενο συνδέσμου και όνομα

Πλεονεκτήματα Μειονεκτήματα
Εύκολο στη χρήση

Δεν είναι ευπροσάρμοστο
Εξαιρετικά περιορισμένη χρήση
Δεν μπορεί καν να ισχύει σε ορισμένες περιπτώσεις

Καλό: XPath

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

Ωστόσο, η πολυπλοκότητα είναι πολύπλοκη. Δεδομένης της δυνατότητας να κάνετε τόσο πολύ με το XPath, έχετε επίσης μια πιο απότομη καμπύλη εκμάθησης σε σύγκριση με άλλες στρατηγικές επιλογής στοιχείων. Αυτό αντισταθμίζεται από μεγάλη ηλεκτρονική τεκμηρίωση η οποία βρίσκεται εύκολα. Ένας μεγάλος πόρος είναι το εκπαιδευτικό πρόγραμμα XPath που βρέθηκε στο W3Schools. com

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

Παράδειγμα:

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

     οδηγού. find_elements (Μέσω XPATH, "// a [id = μενού] /. /")     

Αυτός ο επιλογέας στοιχείων θα στοχεύει στην πρώτη εμφάνιση της ετικέτας αγκύρωσης που έχει την ταυτότητα ίση με το "μενού", στη συνέχεια με το "/. / ", Στοχεύει το γονικό στοιχείο. Το αποτέλεσμα είναι ότι θα έχετε στοχεύσει στο στοιχείο του βασικού μενού.

Περίληψη: XPath

Πλεονεκτήματα Μειονεκτήματα
Μπορεί να επιλέξει γονικό στοιχείο Κακή απόδοση στην IE
Πολύ ευπροσάρμοστο Ελαφριά καμπύλη μάθησης
Πολλά online υποστήριξη

Μεγάλη: ID και κατηγορία

Οι επιλογείς στοιχείων ταυτότητας και κατηγορίας είναι δύο διαφορετικές επιλογές στην αυτοματοποίηση και εκτελούν διαφορετικές λειτουργίες σε μια εφαρμογή. Semalt, για να εξετάσετε ποια στρατηγική επιλογής στοιχείων για τον αυτοματισμό σας, διαφέρουν τόσο λίγο, ότι δεν χρειάζεται να τα εξετάσουμε ξεχωριστά. Στην εφαρμογή, τα χαρακτηριστικά "id" και "class" των στοιχείων, όταν ορίζονται, επιτρέπουν στον προγραμματιστή του UI να χειρίζεται και να στυλίζει την εφαρμογή. Για αυτοματοποίηση, το χρησιμοποιούμε για να στοχεύσουμε ένα συγκεκριμένο στοιχείο αλληλεπίδρασης στην αυτοματοποίηση.

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

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

Παράδειγμα:

Στο παράδειγμά μας, αν επιλέγαμε το στοιχείο μενού ανώτατου επιπέδου, αυτό θα μοιάζει με αυτό:

     οδηγού. find_elements (By ID, "κύριο μενού")     

Αν επιλέγαμε το πρώτο στοιχείο του μενού, θα έμοιαζε έτσι:

     οδηγού. find_elements (Μέσω CLASS_NAME, "μενού")     

Περίληψη: Αναγνωριστικό και κατηγορία

Πλεονεκτήματα Μειονεκτήματα
Εύκολο στη συντήρηση Ο προγραμματιστής μπορεί να τις αλλάξει, διακόπτοντας την αυτοματοποίηση

Εύκολο στην εκμάθηση
Λιγότερο επηρεασμένος από αλλαγή δομής σελίδας

Best: Προσαρμοσμένες ιδιότητες με τον επιλογέα CSS

Εάν ο οργανισμός σας QA έχει μια καλή σχέση συνεργασίας με την ανάπτυξη, είναι πιθανό να μπορέσετε να χρησιμοποιήσετε αυτήν την προσέγγιση βέλτιστης πρακτικής για την αυτοματοποίηση σας. Η χρήση των προσαρμοσμένων ιδιοτήτων και των επιλογών CSS σε στοιχεία στόχευσης έχει πολλαπλά οφέλη τόσο για την ομάδα QA όσο και για τον οργανισμό. Για την ομάδα QA, αυτό επιτρέπει στους μηχανικούς αυτοματισμού να στοχεύουν συγκεκριμένα στοιχεία που χρειάζονται χωρίς να δημιουργούν επιλεκτικούς επιλογείς στοιχείων. Semalt, αυτό απαιτεί τη δυνατότητα προσθήκης προσαρμοσμένων ιδιοτήτων που μπορεί να χρησιμοποιήσει η ομάδα αυτοματισμού στην εφαρμογή. Για να επωφεληθείτε από αυτή την προσέγγιση βέλτιστης πρακτικής, οι ομάδες ανάπτυξης και QA θα πρέπει να συνεργαστούν για να εφαρμόσουν αυτή τη στρατηγική.

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

Ας δούμε τώρα τι συνεπάγεται αυτή η προσέγγιση. Για να εκτελέσετε καλύτερα αυτό, η ομάδα αυτοματοποίησης πρέπει να καταλάβει τι θέλει να στοχεύσει στην αυτοματοποίηση τους. Με την ανάπτυξη των προγραμματιστών, κατά πάσα πιθανότητα οι μηχανικοί του μπροστινού τμήματος, θα δούλεψαν ένα μοτίβο για ένα προσαρμοσμένο χαρακτηριστικό που θα τοποθετούσε σε κάθε στόχο που πρέπει να συνδέσει η ομάδα αυτοματισμού. Για αυτό το παράδειγμα, προσαρμόζουμε ένα χαρακτηριστικό "tid" στα στοιχεία στόχου.

Μια τεχνική σημείωση που υπογραμμίζεται εδώ είναι ένας περιορισμός στους επιλογείς CSS. Δεν επιτρέπεται σκόπιμα να επιλέγουν γονικά στοιχεία όπως το XPath μπορεί. Αυτό γίνεται για να αποφευχθούν οι άπειρες θηλιές στο στυλ CSS στις ιστοσελίδες. Ενώ αυτό είναι καλό για το σχεδιασμό ιστοσελίδων, αποτελεί περιορισμό για τη χρήση του ως στρατηγικής επιλογής στοιχείων αυτοματισμού. Semalt, αυτός ο περιορισμός μπορεί να αποφευχθεί με προσαρμοσμένα χαρακτηριστικά που εφαρμόζονται από την ανάπτυξη. Το QA θα πρέπει να ζητήσει τα κατάλληλα προσαρμοσμένα χαρακτηριστικά, ώστε να μην χρειάζεται να επιλέξετε ένα γονικό στοιχείο.

Εάν η συνεργασία μεταξύ της ομάδας ανάπτυξης και της ομάδας QA δεν υπάρχει ακόμα στον οργανισμό σας, μην ανησυχείτε! Θα πρέπει να εφαρμόσετε αυτήν τη στρατηγική, επειδή μπορεί να είναι ο μηχανισμός που οδηγεί αυτή τη συνεργασία. Ανεξάρτητα από το αν υπάρχει ή όχι αυτός ο πολιτισμός, πρέπει να ακολουθήσετε αυτήν την προσέγγιση και να παρακολουθήσετε ό, τι έρχεται από αυτό. Όχι μόνο θα έχετε μια στρατηγική επιλογής στοιχείων εύκολης συντήρησης, αλλά θα δείτε τα οφέλη από τη συνεπαγόμενη συνεργασία σε άλλες περιοχές του οργανισμού σας. Η συνεργατική σχέση που θα δημιουργήσει θα σας ωφελήσει σε πολλές πτυχές της διασφάλισης ποιότητας, όπως μειωμένα ελαττώματα, μειωμένο χρόνο στην αγορά και αυξημένη παραγωγικότητα. Εργαζόμενοι με την ανάπτυξη, θα πρέπει να αναθεωρήσουν τις απαιτήσεις. Καθώς η ανάπτυξη σχεδιάζει το χαρακτηριστικό γνώρισμα, το QA θα πρέπει να προτείνει ποια είναι τα προσαρμοσμένα χαρακτηριστικά που μπορούν να υλοποιηθούν για την καλύτερη υποστήριξη της προσπάθειας αυτοματισμού. Ενθαρρύνοντας αυτή τη συνεργασία στην αρχή της φάσης σχεδιασμού, θα μετακινήσετε τις ομάδες QA και ανάπτυξης πιο κοντά από την άποψη της συνεργασίας και τη βελτίωση της αποτελεσματικότητας στη διαδικασία ανάπτυξης. Αυτό πιθανότατα θα έχει ευεργετική επίδραση σε άλλους τομείς του Κύκλου Ζωής Ανάπτυξης Λογισμικού. Η Semalt συνεργασία εδώ θα εξοικειώσει την ανάπτυξη και την QA μεταξύ τους, έτσι ώστε να συμβεί και η συνεργασία σε άλλους τομείς.

Παράδειγμα:

Τα προσαρμοσμένα χαρακτηριστικά Semalt στις ετικέτες άγκυρας στο παράδειγμά μας HTML θα είχαν ως αποτέλεσμα κάτι τέτοιο:

            

Εναλλαγή του νέου χαρακτηριστικού σε ορισμένα από τα στοιχεία. Δημιουργήσαμε ένα νέο χαρακτηριστικό που δεν έρχεται σε αντίθεση με οποιοδήποτε τυπικό χαρακτηριστικό HTML που ονομάζεται "tid". Με αυτό το προσαρμοσμένο χαρακτηριστικό, μπορούμε να χρησιμοποιήσουμε έναν επιλογέα CSS για να το στοχεύσουμε:

     οδηγού. find_element (Μέσω CSS_SELECTOR, "[tid = home-link]")     

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

     οδηγού. find_element (Μέσω CSS_SELECTOR, "# main-menu [tid * = '- σύνδεσμος']")    

Τι κάνει το "* =" είναι μια αναζήτηση μπαλαντέρ για την τιμή "-link" μέσα στο tid πεδίο οποιουδήποτε στοιχείου. Ορίστε αυτό το χαρακτηριστικό πίσω από τον προσδιοριστή ID # main-menu, εστιάζει την αναζήτηση στοιχείων στο εσωτερικό του κύριου μενού.

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

     οδηγού. find_element (Μέσω CSS_SELECTOR, "# κύριο μενού, υπομενού a")     

Αυτή η στρατηγική θα επιτρέψει στους μηχανικούς αυτοματισμού τη δυνατότητα να δημιουργήσουν ένα σταθερό αυτοματισμό που να είναι εύκολο να διατηρηθεί και να μην σπάσει από άσχετες αλλαγές στο UI. Η στρατηγική αυτή είναι η καλύτερη δυνατή προσέγγιση. Δεν θα είναι μόνο μια εύκολη λύση για αυτοματοποίηση, αλλά θα ενθαρρύνει τη συνεργασία μεταξύ της ομάδας QA και των προγραμματιστών σας.

Περίληψη: Προσαρμοσμένες ιδιότητες με τους επιλογείς CSS

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

Πολλά online υποστήριξη
Ευέλικτο
Άριστη απόδοση σε όλα τα προγράμματα περιήγησης

Συμπέρασμα

Υπάρχουν μερικές μεγάλες επιλογές για την εφαρμογή μιας στρατηγικής επιλογής βασικών στοιχείων επιχείρησης στο πλαίσιο αυτοματοποίησης. Επιλογές όπως το όνομα της ετικέτας ή το κείμενο του συνδέσμου θα πρέπει να αποφεύγονται αν δεν είναι η μόνη σας επιλογή. Οι επιλογείς XPath, ID και Class είναι μια καλή διαδρομή. Μέχρι στιγμής, η καλύτερη προσέγγιση είναι η εφαρμογή προσαρμοσμένων χαρακτηριστικών και η στόχευσή τους με το CSS Semalt. Αυτό επίσης ενθαρρύνει τη συνεργασία μεταξύ της ομάδας ανάπτυξης και QA.

Εδώ οι επιλογές σας συγκρίνονται δίπλα-δίπλα:

- Ναι
/ - Μερική
- Όχι
Όνομα ετικέτας, Κείμενο συνδέσμου (κλπ. Έχοντας ένα βαθύ υπόβαθρο στην Επιχειρηματική Διασφάλιση Ποιότητας Επιχειρήσεων, ηγείται των ομάδων QA σε ένα ευρύ φάσμα βιομηχανιών όπως το Online Retail, το Web Hosting, η Αυτοκινητοβιομηχανία, η Υγεία και η Διαχείριση Εξόδων. Ως Διευθύνων Σύμβουλος της SQA², προώθησε την αποτελεσματική εκμάθηση και ανάπτυξη στην επιχείρηση μέσω της εφαρμογής ενός συστήματος διαχείρισης της μάθησης καθώς και εβδομαδιαίων πρακτικών συνεδριών τεχνικής κατάρτισης. Δρομολογεί και παραδίδει συνεχή βελτίωση, μείωση του κινδύνου, μείωση του κόστους και αποτελεσματική επικοινωνία.
March 1, 2018