SlideShare a Scribd company logo
1 of 24
‫זילברמן‬ ‫זהב‬
‫טסט‬‫תוצאה‬ ‫עם‬‫מראש‬ ‫ידועה‬ ‫שאיננה‬
‫אחת‬ ‫מפעם‬ ‫יותר‬ ‫ליישם‬ ‫טעם‬ ‫שאין‬ ‫טסט‬
‫שולי‬ ‫משהו‬ ‫שבודק‬ ‫טסט‬"‫מידי‬"‫באפליקציה‬
‫מידית‬ ‫ליישמו‬ ‫שצריך‬ ‫טסט‬.
‫אינטואיציה‬ ‫סמך‬ ‫על‬ ‫שנעשה‬ ‫מראש‬ ‫מוגדר‬ ‫לא‬ ‫טסט‬(Free
Play.)
•‫תכנות‬ ‫שפות‬:Java,C#,Python,Ruby,PHP,Perl,Java
Script (Node),‫ועוד‬.
•‫הפעלה‬ ‫מערכות‬:Windows(XP‫יותר‬ ‫חדשה‬ ‫גרסה‬ ‫וכל‬),Linux
(Ubunto),Mac
•‫דפדפנים‬:Google Chrome 12.0.712.0+,Internet Explorer
6+,
Firefox 3.0+,Opera 11.5+,Android – 2.3+(‫גם‬‫לפלפונים‬‫וגם‬
‫לטאבלטים‬),iOS 3+(‫לפלפונים‬),iOS 3.2+(‫לטאבלטים‬)
‫אוטומציה‬ ‫כבודקי‬,‫כמה‬ ‫לבדוק‬ ‫אפשרות‬ ‫לנו‬ ‫יש‬
‫אחד‬ ‫בטסט‬ ‫חלונות‬.
‫ה‬ ‫מתרכז‬ ‫בו‬ ‫החלון‬ ‫שינוי‬ ‫ידי‬ ‫על‬ ‫נעשה‬ ‫זה‬
WebDriver
‫היתר‬ ‫בין‬,‫קופצים‬ ‫חלונות‬ ‫לבדוק‬ ‫אפשר‬(Alert),‫חלון‬
‫יותר‬ ‫גדול‬ ‫מחלון‬ ‫חלק‬ ‫המהווה‬(Frame),‫ועוד‬.
‫הקופצים‬ ‫החלונות‬ ‫את‬ ‫ניקח‬(Alert)‫כדוגמה‬.
‫בקוד‬ ‫השימוש‬ ‫לאחר‬:
IWebDriver driver = new IWebDriver(..)
‫לקפוץ‬ ‫שיכול‬ ‫הודעה‬ ‫לחלון‬ ‫הפוקוס‬ ‫את‬ ‫להעביר‬ ‫כדי‬:
IAlert popup = driver.SwitchTo().Alert();
‫פעולות‬ ‫בו‬ ‫לבצע‬ ‫אפשר‬ ‫ואז‬:
popup.Accept();
‫לקדמותו‬ ‫המצב‬ ‫את‬ ‫להחזיר‬ ‫וכדי‬:
driver.switchTo().DefaultContent();
‫ה‬ ‫בפעולת‬ ‫שימוש‬–SwitchTo‫למען‬Frame:
‫ה‬ ‫עכשיו‬driver‫הנ‬ ‫באלמנט‬ ‫רק‬ ‫ממוקד‬"‫ל‬,‫כלומר‬,
‫הזה‬ ‫האלמנט‬ ‫את‬ ‫רק‬ ‫שכולל‬ ‫בדף‬ ‫נמצא‬ ‫הוא‬ ‫מבחינתו‬.
‫אחת‬ ‫מחלקה‬ ‫זוהי‬,‫מעיין‬ ‫שמהווה‬‫כמה‬ ‫של‬ ‫שילוב‬
‫מחלקות‬Action‫פעולות‬ ‫לביצוע‬,‫כאשר‬‫חלק‬
‫מתעסקות‬ ‫האלה‬ ‫מהפעולות‬‫עם‬2‫לפחות‬ ‫אלמנטים‬.
‫זו‬ ‫למחלקה‬ ‫אפשרית‬ ‫חלופה‬,‫המחלקה‬ ‫היא‬
"IJavaScriptExecutor”–‫מסוגה‬ ‫שמשתנים‬
‫של‬ ‫סקריפטים‬ ‫להרצת‬ ‫משמשים‬Javascript
‫סלניום‬ ‫באמצעות‬.
‫של‬ ‫מופע‬ ‫הגדרת‬Actions:
Actions action = new Actions(driver);
‫הגדרת‬2‫פעולות‬ ‫יבוצעו‬ ‫עליהם‬ ‫אלמנטים‬:
IWebElement draggable = driver.findElement(By.id(“Test"));
IWebElement droppable = driver.findElement(By.id(“Test"));
‫פעולה‬ ‫ביצוע‬:
action.DragAndDrop(draggable, droppable).Build().Perform();
(‫אחת‬ ‫בפונקציה‬ ‫פעולות‬ ‫של‬ ‫כמות‬ ‫כל‬ ‫לבצע‬ ‫תוכל‬ ‫שהתוכנה‬ ‫כך‬ ‫למען‬ ‫הוא‬ ‫הסוף‬)
‫ב‬ ‫שימוש‬IJavaScriptExecutor:
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("arguments[0].scrollIntoView(true);", element);
‫זוהי‬‫ספריה‬‫דיווחים‬ ‫עבור‬,‫אוטומציה‬ ‫לבדיקות‬ ‫שמיועדת‬
‫ב‬Java‫ו‬.NET
‫היא‬ ‫הדיווחים‬ ‫של‬ ‫המטרה‬‫מפורט‬ ‫ניתוח‬ ‫לקבל‬,‫מסודר‬
‫טסט‬ ‫כל‬ ‫של‬ ‫לשימוש‬ ‫יותר‬ ‫ונוח‬,‫ש‬ ‫לדיווחים‬ ‫בהשוואה‬
visual studio‫מקנה‬.‫מהר‬ ‫מגיב‬ ‫הוא‬,‫ביעילות‬,‫ומקנה‬
‫המערכת‬ ‫על‬ ‫גם‬ ‫פרטים‬‫וגם‬‫עללוח‬‫בקרה‬‫הרצת‬ ‫בעת‬
‫הטסט‬,‫דיווחי‬HTML‫ועוד‬.
‫להוריד‬ ‫צורך‬ ‫יש‬DLL‫בזה‬ ‫להשתמש‬ ‫כדי‬,‫בכתובת‬:
http://relevantcodes.com/extentreports-for-
selenium/
‫ל‬ ‫להיכנס‬“Package Manager Console”
‫להוריד‬‫הספרייה‬ ‫את‬“ExtentReports for
Selenium”
‫כתוצאה‬,‫ה‬DLL‫כך‬ ‫להופיע‬ ‫אמור‬ ‫זה‬ ‫של‬:
‫הגדרת‬Extent Report:
ExtentReports extent = new ExtentReports(filepath*, false)
*(‫הדיווח‬ ‫קובץ‬ ‫שמירת‬ ‫לצורך‬ ‫הוא‬ ‫הנתיב‬,‫והבוליאן‬‫הוא‬"‫מורה‬"‫לתוכנה‬
‫השאלה‬ ‫על‬ ‫שעונה‬–"‫בדיוק‬ ‫נתיב‬ ‫באותו‬ ‫דיווח‬ ‫קובץ‬ ‫קיים‬ ‫כבר‬ ‫אם‬–
‫אותו‬ ‫לדרוס‬?)"
‫לדיווח‬ ‫הנתונים‬ ‫ישלחו‬ ‫שדרכו‬ ‫טסט‬ ‫הגדרת‬:
ExtentTest test = extent.startTest(“Test Name”, “Sample
description”);
‫לדיווח‬ ‫נתונים‬ ‫שליחת‬ ‫לצורך‬ ‫הטסט‬ ‫מצב‬ ‫הגדרת‬:
(Test.log(LogStatus.PASS, “Step details”
‫הטסט‬ ‫סיום‬:
Extent.endTest(test);
‫האובייקט‬ ‫של‬ ‫מופע‬ ‫יצירת‬,‫הסטטוס‬ ‫את‬ ‫נשיג‬ ‫שממנו‬
‫הטסט‬ ‫של‬ ‫הנוכחי‬:
‫ה‬ ‫מצב‬ ‫על‬ ‫מידע‬ ‫הוספת‬HTML:
‫מהטסט‬ ‫לתמונה‬ ‫נתיב‬ ‫הוספת‬:
‫המערכת‬ ‫על‬ ‫פרטים‬ ‫תוספת‬:
" =‫אובייקט‬ ‫מאגר‬."
‫מנת‬ ‫על‬ ‫ליצור‬ ‫שניתן‬ ‫לאובייקט‬ ‫היא‬ ‫הכוונה‬"‫לאכסן‬"‫של‬ ‫קבוצה‬ ‫בתוכו‬
‫משותף‬ ‫מכנה‬ ‫בעל‬ ‫מידע‬.
‫שלו‬ ‫השימושיות‬ ‫את‬ ‫להדגים‬ ‫כדי‬,‫הבא‬ ‫הדבר‬ ‫על‬ ‫חשבו‬:
‫א‬ ‫בודק‬'‫מכניס‬100‫ה‬ ‫לפי‬ ‫שמזוהים‬ ‫אלמנטים‬–ID‫שלהם‬.
‫ה‬ ‫את‬ ‫משנה‬ ‫כלשהו‬ ‫מפתח‬ID‫כל‬ ‫של‬100‫הנ‬ ‫האלמנטים‬"‫ל‬.
‫ב‬ ‫בודק‬'‫האלמנטים‬ ‫באמצעות‬ ‫בדיקות‬ ‫לתכנת‬ ‫רוצה‬,‫שכל‬ ‫מתבשר‬ ‫אבל‬
‫שונו‬ ‫האלמנטים‬.‫א‬ ‫בודק‬ ‫את‬ ‫להטריד‬ ‫מבלי‬ ‫בקוד‬ ‫אותם‬ ‫ימצא‬ ‫כיצד‬'?
‫ניתן‬(‫כמובן‬)‫פנימית‬ ‫מחלקה‬ ‫באמצעות‬ ‫גם‬ ‫זאת‬ ‫לעשות‬,‫באמצעות‬ ‫וגם‬
‫חיצוני‬ ‫קובץ‬.
‫הבאה‬ ‫בדוגמה‬,‫כ‬ ‫שישמש‬ ‫אובייקט‬ ‫ניצור‬ ‫נשתמש‬"‫מאגר‬"‫של‬ ‫לאלמנטים‬
‫כלשהו‬ ‫באתר‬ ‫כלשהי‬ ‫תכולה‬.
‫יש‬ ‫לתכולה‬3‫מסוג‬ ‫אלמנטים‬input,‫ב‬ ‫אותם‬ ‫נקבץ‬ ‫ולכן‬"‫אובייקט‬ ‫מאגר‬"
‫אחד‬:
‫אובייקט‬ ‫ובמאגר‬,‫כך‬ ‫יראה‬ ‫פשוט‬ ‫זה‬:
‫לצורך‬"‫אובייקט‬ ‫מאגר‬"‫השמור‬‫חיצוני‬ ‫בקובץ‬,
‫במסמך‬ ‫האלמנטים‬ ‫את‬ ‫לכתוב‬ ‫נוכל‬XML(‫לדוגמה‬),
‫ה‬ ‫ערך‬ ‫ה‬ ‫את‬ ‫ייצג‬ ‫ערך‬ ‫וכל‬ ‫אלמנט‬ ‫תייצג‬ ‫תגית‬ ‫כשכל‬ID
‫האלמנט‬ ‫של‬.
‫הנ‬ ‫בביטוי‬ ‫הכוונה‬"‫ל‬,‫ב‬ ‫לשימוש‬ ‫היא‬‫דף‬ ‫לכל‬ ‫מחלקה‬
‫באתר‬,‫המחלקה‬ ‫בתוך‬ ‫הדף‬ ‫של‬ ‫האלמנטים‬ ‫כל‬ ‫עם‬
‫שלו‬.
‫קיים‬ ‫להיות‬ ‫שיכול‬ ‫אלמנט‬ ‫לחפש‬ ‫נרצה‬ ‫שאם‬ ‫ככה‬
‫דפים‬ ‫בכמה‬,‫באיזה‬ ‫להגדיר‬ ‫נדע‬ ‫זו‬ ‫מחלקה‬ ‫באמצעות‬
‫אותו‬ ‫מחפשים‬ ‫אנחנו‬ ‫דף‬,‫קוד‬ ‫מכפל‬ ‫ולהימנע‬,‫ולכתוב‬
‫יותר‬ ‫קריא‬ ‫קוד‬.
‫השונים‬ ‫הדפים‬ ‫בין‬ ‫ההבחנה‬ ‫לצורך‬,‫הדפים‬ ‫כל‬ ‫עם‬ ‫תיקייה‬ ‫ליצור‬ ‫אפשר‬,
‫משלו‬ ‫מחלקה‬ ‫תהיה‬ ‫דף‬ ‫לכל‬ ‫כאשר‬.
‫הללו‬ ‫מהמחלקות‬ ‫אחת‬ ‫בכל‬,‫אלמנטים‬ ‫כמה‬ ‫יהיו‬(‫את‬ ‫תהיה‬ ‫מחלקה‬ ‫בכל‬
‫את‬ ‫המייצג‬ ‫בדף‬ ‫בטסטים‬ ‫אליהם‬ ‫להתייחס‬ ‫רוצים‬ ‫שאנחנו‬ ‫האלמנטים‬
‫המחלקה‬,‫כמובן‬),
‫כך‬ ‫המחלקה‬ ‫בתוך‬ ‫בקוד‬ ‫ייכתב‬ ‫הללו‬ ‫מהאלמנטים‬ ‫אחד‬ ‫וכל‬:
‫הקודם‬ ‫בשקף‬ ‫שהוצגו‬ ‫האלמנטים‬,‫הדף‬ ‫של‬ ‫מחלקה‬ ‫בתוך‬ ‫יהיו‬,‫כך‬:
(‫פעולה‬ ‫בו‬ ‫לבצע‬ ‫ניתן‬ ‫שיהיה‬ ‫כדי‬ ‫מוחזר‬ ‫האלמנט‬,‫כמובן‬)
‫מכירים‬ ‫שאנחנו‬ ‫אחרת‬ ‫זיהוי‬ ‫בשיטת‬ ‫שימוש‬,‫יעבוד‬ ‫שגם‬:
‫זוהי‬‫ספריה‬‫הכוללת‬‫לזיהוי‬ ‫כלים‬‫מסוים‬ ‫מסוג‬ ‫אלמנטים‬(‫ב‬
IWebDriver.)
‫היא‬‫לקוחה‬‫מפרויקט‬‫מ‬ ‫זה‬ ‫שם‬ ‫עם‬Angular(‫ב‬ ‫עבודה‬ ‫סביבת‬java
‫מכירים‬ ‫שאתם‬.)
‫ב‬ ‫שנוצרים‬ ‫אלמנטים‬ ‫בזיהוי‬ ‫הוא‬ ‫שלה‬ ‫השימוש‬Angular,‫יש‬ ‫להם‬
‫ייחודיים‬ ‫מאפיינים‬,‫השם‬ ‫כמו‬“ng”‫שלהם‬ ‫במאפיינים‬ ‫להופיע‬ ‫שנוטה‬.
‫אלו‬ ‫אלמנטים‬ ‫למציאת‬ ‫הכרחית‬ ‫תמיד‬ ‫לא‬ ‫שהיא‬ ‫כמובן‬,‫זה‬ ‫בלעדיה‬ ‫אבל‬
‫יעיל‬ ‫פחות‬ ‫הרבה‬,‫מצליח‬ ‫תמיד‬ ‫ולא‬.
‫ידנית‬ ‫להוריד‬ ‫צריך‬ ‫זו‬ ‫ספריה‬ ‫את‬ ‫גם‬,‫יותר‬ ‫פשוט‬ ‫זה‬ ‫כי‬ ‫אם‬(‫לספריה‬
‫פשוט‬ ‫קוראים‬“Proctractor”
‫מ‬ ‫אלמנטים‬ ‫זיהוי‬ ‫להלן‬Angular‫יותר‬ ‫הפשוטה‬ ‫בדרך‬:
(‫שוב‬–‫אפשרי‬ ‫תמיד‬ ‫שזה‬ ‫בטוח‬ ‫לא‬,)
‫מיוחד‬ ‫דרייבר‬ ‫להלן‬‫מהספריה‬protaractor:
IWebDriver driver = new ChromeDriver();
Var ngDriver = new NgWebDriver(driver)
‫הקודמת‬ ‫מהשורה‬ ‫הדרייבר‬ ‫באמצעות‬ ‫אלמנט‬ ‫חיפוש‬ ‫להלן‬,‫לחפש‬ ‫שיכול‬
‫שמבצעת‬ ‫ויזואלית‬ ‫בדיקה‬‫תמונות‬ ‫בין‬ ‫השוואה‬.
‫ויזואליות‬ ‫שגיאות‬ ‫למצוא‬ ‫מנת‬ ‫על‬ ‫שימושית‬,‫בגרפיקה‬
‫בתוכן‬ ‫או‬‫האתר‬ ‫של‬.
‫ספריית‬ ‫עם‬ ‫נעשית‬sikuli,‫בסלניום‬ ‫שמכונת‬
“Sikuli4net”
‫באובייקט‬ ‫משתמשת‬"screen"‫התמונה‬ ‫בתור‬
(‫הבא‬ ‫בשקף‬ ‫דוגמה‬)
‫של‬ ‫מתקדמת‬ ‫גרסה‬ ‫צריך‬NET Framework(4.5.1:)
‫הספרייה‬ ‫את‬ ‫להתקין‬ ‫וכדי‬,‫נוריד‬“Sikuli4Net”:
‫התחלתית‬ ‫הגדרה‬:
Screen screen = new Screen()
‫אתחול‬Pattern(‫לתמונה‬ ‫נתיב‬:)
Pattern logo = new Pattern(@"C:Testtwitter.png")
‫עכשיו‬,‫שהמסך‬ ‫זכרו‬(Screen),‫באתר‬ ‫דף‬ ‫בעצם‬ ‫זה‬,‫היא‬ ‫תמונה‬ ‫כל‬ ‫בעוד‬
‫הזה‬ ‫מהדף‬ ‫מסוים‬ ‫חלק‬.
‫לכן‬,‫תמונות‬ ‫אותם‬ ‫עם‬ ‫פעולות‬ ‫לבצע‬ ‫כדי‬,‫המסך‬ ‫דרך‬ ‫תמיד‬ ‫זאת‬ ‫נעשה‬:
screen.Find(logo);
‫הערה‬:‫ב‬ ‫להשתמש‬ ‫ניתן‬ ‫שדרכה‬ ‫תוכנה‬ ‫גם‬ ‫ישנה‬Sikuli,‫שנקראת‬
Sikuli IDE,‫יותר‬ ‫הרבה‬ ‫מסובך‬ ‫דרכה‬ ‫בו‬ ‫השימוש‬ ‫כי‬ ‫אם‬(‫דרך‬ ‫מאשר‬
‫סלניום‬.)
‫שאלות‬?

More Related Content

Similar to Selenium WebDriver

מושגים בסיסיים
 מושגים בסיסיים מושגים בסיסיים
מושגים בסיסייםBattGirl De
 
ActionScript 3.0-מדריך בסיסי ל
ActionScript 3.0-מדריך בסיסי לActionScript 3.0-מדריך בסיסי ל
ActionScript 3.0-מדריך בסיסי לguest2dbc78
 
C# .net lecture 1 in Hebrew
C# .net lecture 1 in HebrewC# .net lecture 1 in Hebrew
C# .net lecture 1 in HebrewDoron Raifman
 
Stack overflow - by avi halif
Stack overflow - by avi halifStack overflow - by avi halif
Stack overflow - by avi halifAviHalif
 
מדריך להתקנת Joomla 2.5
מדריך להתקנת Joomla 2.5מדריך להתקנת Joomla 2.5
מדריך להתקנת Joomla 2.5Efi Petilon
 
לימוד תיכנות תיאורי (Descriptive Programming) ב-QTP
לימוד תיכנות תיאורי (Descriptive Programming) ב-QTPלימוד תיכנות תיאורי (Descriptive Programming) ב-QTP
לימוד תיכנות תיאורי (Descriptive Programming) ב-QTPYaron Assa
 
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונותג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונותמורן אלקובי
 
סיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידעסיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידעcsnotes
 
DoAT - mobile web-app development
DoAT - mobile web-app developmentDoAT - mobile web-app development
DoAT - mobile web-app developmentRan Byron
 
Miss1 tomer fonia_ppt
Miss1 tomer fonia_pptMiss1 tomer fonia_ppt
Miss1 tomer fonia_pptTMFTMFTMF1
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDEDaniel Cnaan
 
How to backup your Wordpress Database & Site
How to backup your Wordpress Database & SiteHow to backup your Wordpress Database & Site
How to backup your Wordpress Database & SiteHezi Abrass
 
Dw124 3-kernel so-injector
Dw124 3-kernel so-injectorDw124 3-kernel so-injector
Dw124 3-kernel so-injectorAdirMakmel
 

Similar to Selenium WebDriver (20)

אחסון מידע - ל-websql ו-indexdb רן בר-זיק
אחסון מידע - ל-websql ו-indexdb רן בר-זיקאחסון מידע - ל-websql ו-indexdb רן בר-זיק
אחסון מידע - ל-websql ו-indexdb רן בר-זיק
 
מושגים בסיסיים
 מושגים בסיסיים מושגים בסיסיים
מושגים בסיסיים
 
Java - OOP - Exceptions Handling
Java - OOP - Exceptions HandlingJava - OOP - Exceptions Handling
Java - OOP - Exceptions Handling
 
ActionScript 3.0-מדריך בסיסי ל
ActionScript 3.0-מדריך בסיסי לActionScript 3.0-מדריך בסיסי ל
ActionScript 3.0-מדריך בסיסי ל
 
C# .net lecture 1 in Hebrew
C# .net lecture 1 in HebrewC# .net lecture 1 in Hebrew
C# .net lecture 1 in Hebrew
 
Stack overflow - by avi halif
Stack overflow - by avi halifStack overflow - by avi halif
Stack overflow - by avi halif
 
javascript
javascriptjavascript
javascript
 
מדריך להתקנת Joomla 2.5
מדריך להתקנת Joomla 2.5מדריך להתקנת Joomla 2.5
מדריך להתקנת Joomla 2.5
 
לימוד תיכנות תיאורי (Descriptive Programming) ב-QTP
לימוד תיכנות תיאורי (Descriptive Programming) ב-QTPלימוד תיכנות תיאורי (Descriptive Programming) ב-QTP
לימוד תיכנות תיאורי (Descriptive Programming) ב-QTP
 
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונותג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
ג'אווה - תכנות מונחה עצמים - מתודות - דריסה/חפיפה, העמסה ומתודות בונות
 
סיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידעסיכום הקורס באבטחת מידע
סיכום הקורס באבטחת מידע
 
Cs3 3
Cs3 3Cs3 3
Cs3 3
 
Cs3 3
Cs3 3Cs3 3
Cs3 3
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDE
 
DoAT - mobile web-app development
DoAT - mobile web-app developmentDoAT - mobile web-app development
DoAT - mobile web-app development
 
Miss1 tomer fonia_ppt
Miss1 tomer fonia_pptMiss1 tomer fonia_ppt
Miss1 tomer fonia_ppt
 
SAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDESAPUI5 on SAP Web IDE
SAPUI5 on SAP Web IDE
 
How to backup your Wordpress Database & Site
How to backup your Wordpress Database & SiteHow to backup your Wordpress Database & Site
How to backup your Wordpress Database & Site
 
Dw124 3-kernel so-injector
Dw124 3-kernel so-injectorDw124 3-kernel so-injector
Dw124 3-kernel so-injector
 
react-he.pdf
react-he.pdfreact-he.pdf
react-he.pdf
 

Selenium WebDriver

  • 2. ‫טסט‬‫תוצאה‬ ‫עם‬‫מראש‬ ‫ידועה‬ ‫שאיננה‬ ‫אחת‬ ‫מפעם‬ ‫יותר‬ ‫ליישם‬ ‫טעם‬ ‫שאין‬ ‫טסט‬ ‫שולי‬ ‫משהו‬ ‫שבודק‬ ‫טסט‬"‫מידי‬"‫באפליקציה‬ ‫מידית‬ ‫ליישמו‬ ‫שצריך‬ ‫טסט‬. ‫אינטואיציה‬ ‫סמך‬ ‫על‬ ‫שנעשה‬ ‫מראש‬ ‫מוגדר‬ ‫לא‬ ‫טסט‬(Free Play.)
  • 3. •‫תכנות‬ ‫שפות‬:Java,C#,Python,Ruby,PHP,Perl,Java Script (Node),‫ועוד‬. •‫הפעלה‬ ‫מערכות‬:Windows(XP‫יותר‬ ‫חדשה‬ ‫גרסה‬ ‫וכל‬),Linux (Ubunto),Mac •‫דפדפנים‬:Google Chrome 12.0.712.0+,Internet Explorer 6+, Firefox 3.0+,Opera 11.5+,Android – 2.3+(‫גם‬‫לפלפונים‬‫וגם‬ ‫לטאבלטים‬),iOS 3+(‫לפלפונים‬),iOS 3.2+(‫לטאבלטים‬)
  • 4. ‫אוטומציה‬ ‫כבודקי‬,‫כמה‬ ‫לבדוק‬ ‫אפשרות‬ ‫לנו‬ ‫יש‬ ‫אחד‬ ‫בטסט‬ ‫חלונות‬. ‫ה‬ ‫מתרכז‬ ‫בו‬ ‫החלון‬ ‫שינוי‬ ‫ידי‬ ‫על‬ ‫נעשה‬ ‫זה‬ WebDriver ‫היתר‬ ‫בין‬,‫קופצים‬ ‫חלונות‬ ‫לבדוק‬ ‫אפשר‬(Alert),‫חלון‬ ‫יותר‬ ‫גדול‬ ‫מחלון‬ ‫חלק‬ ‫המהווה‬(Frame),‫ועוד‬.
  • 5. ‫הקופצים‬ ‫החלונות‬ ‫את‬ ‫ניקח‬(Alert)‫כדוגמה‬. ‫בקוד‬ ‫השימוש‬ ‫לאחר‬: IWebDriver driver = new IWebDriver(..) ‫לקפוץ‬ ‫שיכול‬ ‫הודעה‬ ‫לחלון‬ ‫הפוקוס‬ ‫את‬ ‫להעביר‬ ‫כדי‬: IAlert popup = driver.SwitchTo().Alert(); ‫פעולות‬ ‫בו‬ ‫לבצע‬ ‫אפשר‬ ‫ואז‬: popup.Accept(); ‫לקדמותו‬ ‫המצב‬ ‫את‬ ‫להחזיר‬ ‫וכדי‬: driver.switchTo().DefaultContent();
  • 6. ‫ה‬ ‫בפעולת‬ ‫שימוש‬–SwitchTo‫למען‬Frame: ‫ה‬ ‫עכשיו‬driver‫הנ‬ ‫באלמנט‬ ‫רק‬ ‫ממוקד‬"‫ל‬,‫כלומר‬, ‫הזה‬ ‫האלמנט‬ ‫את‬ ‫רק‬ ‫שכולל‬ ‫בדף‬ ‫נמצא‬ ‫הוא‬ ‫מבחינתו‬.
  • 7. ‫אחת‬ ‫מחלקה‬ ‫זוהי‬,‫מעיין‬ ‫שמהווה‬‫כמה‬ ‫של‬ ‫שילוב‬ ‫מחלקות‬Action‫פעולות‬ ‫לביצוע‬,‫כאשר‬‫חלק‬ ‫מתעסקות‬ ‫האלה‬ ‫מהפעולות‬‫עם‬2‫לפחות‬ ‫אלמנטים‬. ‫זו‬ ‫למחלקה‬ ‫אפשרית‬ ‫חלופה‬,‫המחלקה‬ ‫היא‬ "IJavaScriptExecutor”–‫מסוגה‬ ‫שמשתנים‬ ‫של‬ ‫סקריפטים‬ ‫להרצת‬ ‫משמשים‬Javascript ‫סלניום‬ ‫באמצעות‬.
  • 8. ‫של‬ ‫מופע‬ ‫הגדרת‬Actions: Actions action = new Actions(driver); ‫הגדרת‬2‫פעולות‬ ‫יבוצעו‬ ‫עליהם‬ ‫אלמנטים‬: IWebElement draggable = driver.findElement(By.id(“Test")); IWebElement droppable = driver.findElement(By.id(“Test")); ‫פעולה‬ ‫ביצוע‬: action.DragAndDrop(draggable, droppable).Build().Perform(); (‫אחת‬ ‫בפונקציה‬ ‫פעולות‬ ‫של‬ ‫כמות‬ ‫כל‬ ‫לבצע‬ ‫תוכל‬ ‫שהתוכנה‬ ‫כך‬ ‫למען‬ ‫הוא‬ ‫הסוף‬) ‫ב‬ ‫שימוש‬IJavaScriptExecutor: IJavaScriptExecutor js = driver as IJavaScriptExecutor; js.ExecuteScript("arguments[0].scrollIntoView(true);", element);
  • 9. ‫זוהי‬‫ספריה‬‫דיווחים‬ ‫עבור‬,‫אוטומציה‬ ‫לבדיקות‬ ‫שמיועדת‬ ‫ב‬Java‫ו‬.NET ‫היא‬ ‫הדיווחים‬ ‫של‬ ‫המטרה‬‫מפורט‬ ‫ניתוח‬ ‫לקבל‬,‫מסודר‬ ‫טסט‬ ‫כל‬ ‫של‬ ‫לשימוש‬ ‫יותר‬ ‫ונוח‬,‫ש‬ ‫לדיווחים‬ ‫בהשוואה‬ visual studio‫מקנה‬.‫מהר‬ ‫מגיב‬ ‫הוא‬,‫ביעילות‬,‫ומקנה‬ ‫המערכת‬ ‫על‬ ‫גם‬ ‫פרטים‬‫וגם‬‫עללוח‬‫בקרה‬‫הרצת‬ ‫בעת‬ ‫הטסט‬,‫דיווחי‬HTML‫ועוד‬. ‫להוריד‬ ‫צורך‬ ‫יש‬DLL‫בזה‬ ‫להשתמש‬ ‫כדי‬,‫בכתובת‬: http://relevantcodes.com/extentreports-for- selenium/
  • 10. ‫ל‬ ‫להיכנס‬“Package Manager Console” ‫להוריד‬‫הספרייה‬ ‫את‬“ExtentReports for Selenium” ‫כתוצאה‬,‫ה‬DLL‫כך‬ ‫להופיע‬ ‫אמור‬ ‫זה‬ ‫של‬:
  • 11. ‫הגדרת‬Extent Report: ExtentReports extent = new ExtentReports(filepath*, false) *(‫הדיווח‬ ‫קובץ‬ ‫שמירת‬ ‫לצורך‬ ‫הוא‬ ‫הנתיב‬,‫והבוליאן‬‫הוא‬"‫מורה‬"‫לתוכנה‬ ‫השאלה‬ ‫על‬ ‫שעונה‬–"‫בדיוק‬ ‫נתיב‬ ‫באותו‬ ‫דיווח‬ ‫קובץ‬ ‫קיים‬ ‫כבר‬ ‫אם‬– ‫אותו‬ ‫לדרוס‬?)" ‫לדיווח‬ ‫הנתונים‬ ‫ישלחו‬ ‫שדרכו‬ ‫טסט‬ ‫הגדרת‬: ExtentTest test = extent.startTest(“Test Name”, “Sample description”); ‫לדיווח‬ ‫נתונים‬ ‫שליחת‬ ‫לצורך‬ ‫הטסט‬ ‫מצב‬ ‫הגדרת‬: (Test.log(LogStatus.PASS, “Step details” ‫הטסט‬ ‫סיום‬: Extent.endTest(test);
  • 12. ‫האובייקט‬ ‫של‬ ‫מופע‬ ‫יצירת‬,‫הסטטוס‬ ‫את‬ ‫נשיג‬ ‫שממנו‬ ‫הטסט‬ ‫של‬ ‫הנוכחי‬: ‫ה‬ ‫מצב‬ ‫על‬ ‫מידע‬ ‫הוספת‬HTML: ‫מהטסט‬ ‫לתמונה‬ ‫נתיב‬ ‫הוספת‬: ‫המערכת‬ ‫על‬ ‫פרטים‬ ‫תוספת‬:
  • 13. " =‫אובייקט‬ ‫מאגר‬." ‫מנת‬ ‫על‬ ‫ליצור‬ ‫שניתן‬ ‫לאובייקט‬ ‫היא‬ ‫הכוונה‬"‫לאכסן‬"‫של‬ ‫קבוצה‬ ‫בתוכו‬ ‫משותף‬ ‫מכנה‬ ‫בעל‬ ‫מידע‬. ‫שלו‬ ‫השימושיות‬ ‫את‬ ‫להדגים‬ ‫כדי‬,‫הבא‬ ‫הדבר‬ ‫על‬ ‫חשבו‬: ‫א‬ ‫בודק‬'‫מכניס‬100‫ה‬ ‫לפי‬ ‫שמזוהים‬ ‫אלמנטים‬–ID‫שלהם‬. ‫ה‬ ‫את‬ ‫משנה‬ ‫כלשהו‬ ‫מפתח‬ID‫כל‬ ‫של‬100‫הנ‬ ‫האלמנטים‬"‫ל‬. ‫ב‬ ‫בודק‬'‫האלמנטים‬ ‫באמצעות‬ ‫בדיקות‬ ‫לתכנת‬ ‫רוצה‬,‫שכל‬ ‫מתבשר‬ ‫אבל‬ ‫שונו‬ ‫האלמנטים‬.‫א‬ ‫בודק‬ ‫את‬ ‫להטריד‬ ‫מבלי‬ ‫בקוד‬ ‫אותם‬ ‫ימצא‬ ‫כיצד‬'? ‫ניתן‬(‫כמובן‬)‫פנימית‬ ‫מחלקה‬ ‫באמצעות‬ ‫גם‬ ‫זאת‬ ‫לעשות‬,‫באמצעות‬ ‫וגם‬ ‫חיצוני‬ ‫קובץ‬.
  • 14. ‫הבאה‬ ‫בדוגמה‬,‫כ‬ ‫שישמש‬ ‫אובייקט‬ ‫ניצור‬ ‫נשתמש‬"‫מאגר‬"‫של‬ ‫לאלמנטים‬ ‫כלשהו‬ ‫באתר‬ ‫כלשהי‬ ‫תכולה‬. ‫יש‬ ‫לתכולה‬3‫מסוג‬ ‫אלמנטים‬input,‫ב‬ ‫אותם‬ ‫נקבץ‬ ‫ולכן‬"‫אובייקט‬ ‫מאגר‬" ‫אחד‬:
  • 15. ‫אובייקט‬ ‫ובמאגר‬,‫כך‬ ‫יראה‬ ‫פשוט‬ ‫זה‬: ‫לצורך‬"‫אובייקט‬ ‫מאגר‬"‫השמור‬‫חיצוני‬ ‫בקובץ‬, ‫במסמך‬ ‫האלמנטים‬ ‫את‬ ‫לכתוב‬ ‫נוכל‬XML(‫לדוגמה‬), ‫ה‬ ‫ערך‬ ‫ה‬ ‫את‬ ‫ייצג‬ ‫ערך‬ ‫וכל‬ ‫אלמנט‬ ‫תייצג‬ ‫תגית‬ ‫כשכל‬ID ‫האלמנט‬ ‫של‬.
  • 16. ‫הנ‬ ‫בביטוי‬ ‫הכוונה‬"‫ל‬,‫ב‬ ‫לשימוש‬ ‫היא‬‫דף‬ ‫לכל‬ ‫מחלקה‬ ‫באתר‬,‫המחלקה‬ ‫בתוך‬ ‫הדף‬ ‫של‬ ‫האלמנטים‬ ‫כל‬ ‫עם‬ ‫שלו‬. ‫קיים‬ ‫להיות‬ ‫שיכול‬ ‫אלמנט‬ ‫לחפש‬ ‫נרצה‬ ‫שאם‬ ‫ככה‬ ‫דפים‬ ‫בכמה‬,‫באיזה‬ ‫להגדיר‬ ‫נדע‬ ‫זו‬ ‫מחלקה‬ ‫באמצעות‬ ‫אותו‬ ‫מחפשים‬ ‫אנחנו‬ ‫דף‬,‫קוד‬ ‫מכפל‬ ‫ולהימנע‬,‫ולכתוב‬ ‫יותר‬ ‫קריא‬ ‫קוד‬.
  • 17. ‫השונים‬ ‫הדפים‬ ‫בין‬ ‫ההבחנה‬ ‫לצורך‬,‫הדפים‬ ‫כל‬ ‫עם‬ ‫תיקייה‬ ‫ליצור‬ ‫אפשר‬, ‫משלו‬ ‫מחלקה‬ ‫תהיה‬ ‫דף‬ ‫לכל‬ ‫כאשר‬. ‫הללו‬ ‫מהמחלקות‬ ‫אחת‬ ‫בכל‬,‫אלמנטים‬ ‫כמה‬ ‫יהיו‬(‫את‬ ‫תהיה‬ ‫מחלקה‬ ‫בכל‬ ‫את‬ ‫המייצג‬ ‫בדף‬ ‫בטסטים‬ ‫אליהם‬ ‫להתייחס‬ ‫רוצים‬ ‫שאנחנו‬ ‫האלמנטים‬ ‫המחלקה‬,‫כמובן‬), ‫כך‬ ‫המחלקה‬ ‫בתוך‬ ‫בקוד‬ ‫ייכתב‬ ‫הללו‬ ‫מהאלמנטים‬ ‫אחד‬ ‫וכל‬:
  • 18. ‫הקודם‬ ‫בשקף‬ ‫שהוצגו‬ ‫האלמנטים‬,‫הדף‬ ‫של‬ ‫מחלקה‬ ‫בתוך‬ ‫יהיו‬,‫כך‬: (‫פעולה‬ ‫בו‬ ‫לבצע‬ ‫ניתן‬ ‫שיהיה‬ ‫כדי‬ ‫מוחזר‬ ‫האלמנט‬,‫כמובן‬) ‫מכירים‬ ‫שאנחנו‬ ‫אחרת‬ ‫זיהוי‬ ‫בשיטת‬ ‫שימוש‬,‫יעבוד‬ ‫שגם‬:
  • 19. ‫זוהי‬‫ספריה‬‫הכוללת‬‫לזיהוי‬ ‫כלים‬‫מסוים‬ ‫מסוג‬ ‫אלמנטים‬(‫ב‬ IWebDriver.) ‫היא‬‫לקוחה‬‫מפרויקט‬‫מ‬ ‫זה‬ ‫שם‬ ‫עם‬Angular(‫ב‬ ‫עבודה‬ ‫סביבת‬java ‫מכירים‬ ‫שאתם‬.) ‫ב‬ ‫שנוצרים‬ ‫אלמנטים‬ ‫בזיהוי‬ ‫הוא‬ ‫שלה‬ ‫השימוש‬Angular,‫יש‬ ‫להם‬ ‫ייחודיים‬ ‫מאפיינים‬,‫השם‬ ‫כמו‬“ng”‫שלהם‬ ‫במאפיינים‬ ‫להופיע‬ ‫שנוטה‬. ‫אלו‬ ‫אלמנטים‬ ‫למציאת‬ ‫הכרחית‬ ‫תמיד‬ ‫לא‬ ‫שהיא‬ ‫כמובן‬,‫זה‬ ‫בלעדיה‬ ‫אבל‬ ‫יעיל‬ ‫פחות‬ ‫הרבה‬,‫מצליח‬ ‫תמיד‬ ‫ולא‬. ‫ידנית‬ ‫להוריד‬ ‫צריך‬ ‫זו‬ ‫ספריה‬ ‫את‬ ‫גם‬,‫יותר‬ ‫פשוט‬ ‫זה‬ ‫כי‬ ‫אם‬(‫לספריה‬ ‫פשוט‬ ‫קוראים‬“Proctractor”
  • 20. ‫מ‬ ‫אלמנטים‬ ‫זיהוי‬ ‫להלן‬Angular‫יותר‬ ‫הפשוטה‬ ‫בדרך‬: (‫שוב‬–‫אפשרי‬ ‫תמיד‬ ‫שזה‬ ‫בטוח‬ ‫לא‬,) ‫מיוחד‬ ‫דרייבר‬ ‫להלן‬‫מהספריה‬protaractor: IWebDriver driver = new ChromeDriver(); Var ngDriver = new NgWebDriver(driver) ‫הקודמת‬ ‫מהשורה‬ ‫הדרייבר‬ ‫באמצעות‬ ‫אלמנט‬ ‫חיפוש‬ ‫להלן‬,‫לחפש‬ ‫שיכול‬
  • 21. ‫שמבצעת‬ ‫ויזואלית‬ ‫בדיקה‬‫תמונות‬ ‫בין‬ ‫השוואה‬. ‫ויזואליות‬ ‫שגיאות‬ ‫למצוא‬ ‫מנת‬ ‫על‬ ‫שימושית‬,‫בגרפיקה‬ ‫בתוכן‬ ‫או‬‫האתר‬ ‫של‬. ‫ספריית‬ ‫עם‬ ‫נעשית‬sikuli,‫בסלניום‬ ‫שמכונת‬ “Sikuli4net” ‫באובייקט‬ ‫משתמשת‬"screen"‫התמונה‬ ‫בתור‬ (‫הבא‬ ‫בשקף‬ ‫דוגמה‬)
  • 22. ‫של‬ ‫מתקדמת‬ ‫גרסה‬ ‫צריך‬NET Framework(4.5.1:) ‫הספרייה‬ ‫את‬ ‫להתקין‬ ‫וכדי‬,‫נוריד‬“Sikuli4Net”:
  • 23. ‫התחלתית‬ ‫הגדרה‬: Screen screen = new Screen() ‫אתחול‬Pattern(‫לתמונה‬ ‫נתיב‬:) Pattern logo = new Pattern(@"C:Testtwitter.png") ‫עכשיו‬,‫שהמסך‬ ‫זכרו‬(Screen),‫באתר‬ ‫דף‬ ‫בעצם‬ ‫זה‬,‫היא‬ ‫תמונה‬ ‫כל‬ ‫בעוד‬ ‫הזה‬ ‫מהדף‬ ‫מסוים‬ ‫חלק‬. ‫לכן‬,‫תמונות‬ ‫אותם‬ ‫עם‬ ‫פעולות‬ ‫לבצע‬ ‫כדי‬,‫המסך‬ ‫דרך‬ ‫תמיד‬ ‫זאת‬ ‫נעשה‬: screen.Find(logo); ‫הערה‬:‫ב‬ ‫להשתמש‬ ‫ניתן‬ ‫שדרכה‬ ‫תוכנה‬ ‫גם‬ ‫ישנה‬Sikuli,‫שנקראת‬ Sikuli IDE,‫יותר‬ ‫הרבה‬ ‫מסובך‬ ‫דרכה‬ ‫בו‬ ‫השימוש‬ ‫כי‬ ‫אם‬(‫דרך‬ ‫מאשר‬ ‫סלניום‬.)