יש לכם כבר מערך בדיקות אוטומטיות, אתם מריצים אותו על בסיס קבוע , יש טסטים שנופלים, יש כאלו שעוברים, כתבתם כבר תשתית ללוגים, דוחו"ת , אפילו הגדלתם לעשות והטמעתם פונקציונליות אשר לוקחת צילום מסך בכל נפילה של טסט , או סתם ככה בשביל להשוות תמונות… מה עוד ? כיצד ניתן לשפר את מערך ה-Tracking של ההרצות שלכם ?
Selenium ScreenCast יתן לכם את היכולת להקליט את הבדיקות שלכם ולייצר לכם מההקלטה – סרטון. בצורה פשוטה ודי ידידותית ניתן לעשות זאת על טסט בודד או על חבילה של טסטים, אתם קובעים היכן מתחילים להקליט ומתי מסיימים.
אז מה הסוד ? API כמובן. ואיך עושים זאת ? פשוט מאוד, נתחיל בזה שנצרף את קובץ ה-JAR הזה לפרוייקט הבדיקות שלנו.
בקוד שלנו נבצע שתי קריאות לספריות העבודה שלנו:
import atu.testrecorder.*; import atu.testrecorder.exceptions.ATUTestRecorderException;
בשביל להתחיל לעבוד עם ה-API ניצור instance מהמחלקה הראשית של ה-TestRecorder כך:
ATUTestRecorder recorder = new ATUTestRecorder(FILE_PATH,FILE_NAME,false);
אנו רואים כי ה-Construstor שלנו מקבל שלושה ערכים:
FILE_PATH – אותו נתיב לשם אנו מעוניינים לשמור את קובץ הסרטון שלנו
FILE_NAME – שם הסרטון שאנו רוצים לתת (הקובץ יקודד וישמר כקובץ MOV)
TRUE / FALSE – מאפשר הקלטת סאונד בסרטון שלנו (TRUE – כן , FALSE – לא)
כעת מה שנותר לנו זה להפעיל את שתי המתודות של האובייקט שיצרנו:
recorder.start(); // Start Recording recorder.stop(); // Stop Recording
בואו נראה דוגמא. בתוכנית הבאה אני נכנס לאתר: https://atidcollege.co.il/Xamples/bmi שהיא אפליקציה קטנה שכתבתי ב-JS והיא למעשה יודעת לחשב את המסה כנגד משקל הגוף (BMI), כאשר מכניסים את המשקל והגובה של האדם והיא מוציאה את ערך ה-BMI שלו.
התוכנית מכניסה שלושה ערכים שונים של משקל וגובה , ובודקת אותם בעזרת פעולת Assert פשוטה.
נראה תחילה את הסרטון שהצלחתי לייצא מהרצת התוכנית ואח"כ נעבור למימוש הקוד :
* בסרטון אנו רואים את התוכנית רצה עם השהייה של שנייה בין step ל-step רק בשביל המחשה טובה יותר לתצוגת הסרטון, בפועל הריצה אמורה להסתיים תוך מספר שניות בודדות.
והקוד נראה כך:
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import atu.testrecorder.*; import atu.testrecorder.exceptions.ATUTestRecorderException; public class ScreenCast { private static WebDriver driver; private static ATUTestRecorder recorder; private static WebDriverWait wait; private static String filePath = "C://Projects//Selenuim//ScreenCasts"; private static String fileName = "myMovie"; private String expected; @Test public void testcase1() throws InterruptedException { expected = "22"; driver.findElement(By.id("reset_data")).click(); driver.findElement(By.id("weight")).sendKeys("70"); driver.findElement(By.id("hight")).sendKeys("180"); driver.findElement(By.id("calculate_data")).click(); wait.until(ExpectedConditions.textToBePresentInElementValue(By.id("bmi_means"), "That")); assertEquals(expected, driver.findElement(By.id("bmi_result")).getAttribute("value")); } @Test public void testcase2() { expected = "33"; driver.findElement(By.id("reset_data")).click(); driver.findElement(By.id("weight")).sendKeys("120"); driver.findElement(By.id("hight")).sendKeys("190"); driver.findElement(By.id("calculate_data")).click(); wait.until(ExpectedConditions.textToBePresentInElementValue(By.id("bmi_means"), "That")); assertEquals(expected, driver.findElement(By.id("bmi_result")).getAttribute("value")); } @Test public void testcase3() { expected = "15"; driver.findElement(By.id("reset_data")).click(); driver.findElement(By.id("weight")).sendKeys("60"); driver.findElement(By.id("hight")).sendKeys("200"); driver.findElement(By.id("calculate_data")).click(); wait.until(ExpectedConditions.textToBePresentInElementValue(By.id("bmi_means"), "That")); assertEquals(expected, driver.findElement(By.id("bmi_result")).getAttribute("value")); driver.findElement(By.id("reset_data")).click(); } @BeforeClass public static void openBrowser() throws ATUTestRecorderException { recorder = new ATUTestRecorder(filePath, fileName, false); System.setProperty("webdriver.chrome.driver", "C://Selenuim/Drivers/chromedriver.exe"); driver = new ChromeDriver(); driver.manage().window().maximize(); recorder.start(); driver.get("http://blog.yoniflenner.net/bmi"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); wait = new WebDriverWait(driver, 10); } @AfterClass public static void closeBrowser() throws ATUTestRecorderException { recorder.stop(); driver.quit(); } }