Coypu Wrapper

בפוסט זה אנו נסקור מעטפת מעניינת שכתבו מעל ספריות הסלניום, גבירותיי ורבותיי, הכירו את ה-Coypu.

את ה-Coypu בטבע ניתן לראות באגמון החולה שבצפון הארץ למשל, בשפה העברית אנו קוראים לה נוטריה והשם בא כאיזה ספין אוף לפריימוורק אחר – Capybara (בשפת הרובי) שה-Coypu נכתב בהשראתו, רק לשפת #C

ה-Coypu (מבטאים זאת: קוואי-פו) הוא למעשה Wrapper שנכתב כקוד פתוח והוא יושב מעל ספריות הסלניום הגנריות (ב-#C) ונותן לנו ממשק API נוח יותר לעבודה, המעטפת הזו עובדת בסגנון ה-DSL (קיצור של Domain Specific Language) , שזוהי למעשה צורת כתיבה יותר אנושית, כך שאנשים פחות טכניים, פחות מביני שפות תכנות – יוכלו להתחבר אליה בקלות.

מעבר לכך, מי שימצא את המעטפת הזו יעילה אלו מפתחי אוטומציה על ה-Web שכותבים ב-NET. ומשתמשים ב-Sleeps , Retries וביטויי XPATH ו-CSS ארוכים ומורכבים.

בואו נכיר את ה-API של Coypu

תחילה נראה דוגמאות להבדלים בין הסינקטס של סלניום ולבין זה של Coypu:

כפי שאתם שמים לב בטבלה, העבודה עם Coypu מתבצעת בשפה יותר אנושית, יותר ברורה.

ישנם מקרים בהם פעולת ה-Click בסלניום היא זו שאמורה להפוך את הכפתור מ-Check ל-Uncheck , רגע, ואם אנחנו רוצים ללחוץ עליו רק במידה והוא Check ? את המקרה הזה אנו נצטרך לממש בסלניום, ואילו ב-Coypu כבר מימשו לנו ויצר 2 פעולות: Check ו-Uncheck. נוח, ברור, קליל.

אז מה יש ל-Coypu API להציע ? הנה כמה דוגמאות:

 
browser.ClickButton("MyButton"); // Click on a Button
 
browser.ClickLink("MyLink"); // Click on a Link
 
browser.Select("OptionA").From("Menu"); // selects from DropDown list
 
browser.FillIn("textField").With("Hello World"); // Updates a Text Field
 
browser.FillIn("Photo").With(@"c:\photos\yoni.jpg") // Upload External File
 
browser.Choose("Gender"); // Choose from Radio Button
 
browser.Check("AutomationDeveloper"); // Check Box
 
browser.Uncheck("AutomationDeveloper"); // UnCheck Box
 
browser.FindCss("input[type=checkbox].AutomationDeveloper"); // Find Element with CSS
 
browser.ClickButton("Close", new Options{Match = Match.First}); // Click on the First Close button it finds
 
browser.FindWindow("Pop Up Window"); // Switch to PopUp Window
 
browser.FindXPath("//ul[@class = 'menu']/li").Exists(); // Returns true (if found) or false (if not found)
 
browser.FindField("amount").HasValue("100"); // Returns true (if 100 value is in amount field) or false (if 100 value is NOT in amount field)
 
browser.FindCss("table#myData").OuterHTML; // Returns the Outer HTML
 
browser.FindCss("table#myData").InnerHTML; // Returns the Inner HTML
 
browser.HasDialog("Are you sure ?"); // Returns true (if Dialog Box appear) or false (if  Dialog Box Does not appear)
 
browser.AcceptDialog(); // Click on OK button on Dialog Box
 
browser.CancelDialog(); // Click on Cancel button on Dialog Box
 
browser.SaveScreenshot(@"c:\screenshots\image_01.jpg"); // Take Screen Shot
 
browser.FindWindow("Popup Window").SaveScreenshot(@"c:\screenshots\image_02.jpg"); // Take Screen Shot on new Window
 
browser.ClickButton("Search", new Options { WaitBeforeClick = TimeSpan.FromMilliseconds(0.5) } ) // Setting Wait Timeout
 

אז איך מתחילים לעבוד עם Coypu ?

תחילה ניצור פרוייקט חדש ב-Visual Studio , נפתח את ה-Nuget Package Manager ונתקין 2 חבילות:

  1. Coypu
  2. Coypu.NUnit

כעת נתחיל לכתוב את המחלקה שלנו, אז קודם כל, נגדיר את האיתחול של הדפדפן וזה ע"י יצירת אובייקט מ- SessionConfiguration:

var sessionConfiguration = new SessionConfiguration()
{
    Browser = Browser.Chrome,
    AppHost = "ebay.com"
};

* מקרה הבדיקה שלנו להפעם הוא להיכנס לאתר של ebay עם דפדפן הכרום , להיכנס לעמוד הדילים , לחפש את הערך: "Samsung Galaxy" ולוודא כי קיים שם ה-Note 9

נגדיר כעת אובייקט חדש בשם browser אותו נאתחל ל-sessionConfiguration:

var browser = new BrowserSession(sessionConfiguration);

כעת אובייקט ה-browser יכיל בתוכו מגוון רחב של מאפיינים ופעולות אשר מומשו לנו בתוך ה-Coypu (בדיוק באותו האופן שמימשו לנו את ה-driver מסוג ה-IWebDriver בסלניום הטהור):

זוהי דוגמא לתוכנית קטנה ב-Coypu שמבצעת את הבדיקה הנ"ל:

namespace coypuProj
{
    [TestFixture]
    public class UnitTest1
    {
        [Test]
        public void TestMethod1()
        {
            var sessionConfiguration = new SessionConfiguration()
            {
                Browser = Browser.Chrome,
                AppHost = "ebay.com"
            };
            var browser = new BrowserSession(sessionConfiguration);

            browser.Visit("/globaldeals");
            browser.FillIn("gh-ac").With("Samsung Galaxy");
            browser.ClickButton("gh-btn");
            var elem = browser.FindLink("Galaxy");
            Assert.That(elem, Shows.Content("Samsung Galaxy Note 9"));
            browser.Dispose();
        }
    }
}

שימו לב כי בתוכנית שלנו אנחנו עדיין עובדים אם אוסף החוקים של NUnit , שזה אומר עבודה נכונה של ה-Test עם ה-Fixtures הנוספים בהם נאתחל את אובייקט ה-browser ונסגור אותו, זה אמנם לא מופיע בדוגמא הנ"ל, אבל בפירוש יש להתנהג במקרה כזה בדיוק באותו האופן שהיינו כותבים עם סלניום ו-Nunit.

Scroll to Top
דילוג לתוכן