מבוא לאוטומציה – Selenium WebDriver

ברוכים הבאים לכלי אוטומציה – Selenium

יהיה טוב קצת להכיר כלי אוטומציה לבדיקות WEB.
לכן, החלטתי לעשות שיעור מבוא לזה : )

סרטון קטן מה אנחנו הולכים ללמוד:

הערה: כל קישורים לתוכניות ושאר דברים שיש בסרטון אם הסברים כתובים במאמר הזה, מטה!

  • Selenium WebDriver

כלי אוטומציה שמאפשר עבודה עם הדפדפנים שונים תוך שימוש בשפות תכנות שונות כגון שפת Java.

אנחנו נעבוד עם שפת Java

הגדרות בסיסיות עבור Selenium Webdriver:

אנו נדגים שימוש ב-Selenium WebDriver תוך שימוש בשפת – Java ו-JAVA IDE IDEA.

  • קודם כל יש להוריד Java Development Kit – JDK בקישור הבא:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

  • בנוסף יש להוריד את JAVA IDE IDEA

https://www.jetbrains.com/idea/download/#section=windows

יצירת פרויקט

פותחים את JAVA IDE IDEA ויוצרים פרויקט חדש:

לאחר מכן יש לבחור Gradle ולסמן Java

לאחר מכן למלא שדות הבאים:

לסמן הכל כפי שמופיע בתמונה הבא:

לאחר מכן לבחור תיקיה שבה יהיה הקוד ושם לפרויקט

  • לצורך יצירת אינטראקציה בין Selenium Webdriver והקוד בספת Java, יש לעדכן Gradle:

http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22selenium-java%22

כאשר יש לבחור גרסה אחרונה:

עושים קליק על 3.9.1 ועושים העתק של Gradle/Grails זה יאפשר להוריד Driver לצורך קישור בין הקוד תכנות ו-Selenium Webdriver

כלומר יש לעשות העתק לקוד הזה:

compile 'org.seleniumhq.selenium:selenium-java:3.14.0'

עכשיו ב-IDEA יש לעשות קליק ב – build.gradle ולהדביק את הקוד מ Gradle/Grails

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile 'org.seleniumhq.selenium:selenium-java:3.14.0'
}

טוב עכשיו זה הזמן לביצוע סינכרוניזציה – הורדת Selenium Webdriver

מזל טוב, הכל מוכן לבדיקות אוטומציה : )

אז בואו נלמד מה זה Locators

locators

נפתח מחלקה חדשה בתיקיה Test/Java:
Run_Browsers

IDE IDEA נותנת עצות באיזו ספריות יש להשתמש תוך לחיצה על Alt+Enter ניתן להוסיף קוד של עצות לתוכנה שלנו.

הרצת דפדפנים: Chrome, Firefox, IE

  • להרצת דפדפן Firefox יש צורך בהורדת GeckoDriver

https://github.com/mozilla/geckodriver/releases

  • להרצת דפדפן Chrome יש צורך בהורדת ChromeDriver

https://sites.google.com/a/chromium.org/chromedriver/downloads

נבחר תיקיה ששם יהיו ה-webdrivers שהורדנו:


בואו נבדוק אם כותרת של עמוד HTML מתאמת ל-STRING.

לצורך כך יש להוסיף למחלקה שלנו, ספריות.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

לאחר זה, נסדר בלוקים שירוצו בתוכנה:

import org.junit.Before;
import org.junit.Test;
import org.junit.After;

הבלוק BEFORE ירוץ ראשון:
יש כאן הגדרות תיקיות איפה נמצאים ה-drivers – צבע כחול.
הגדרת אובייקטים – צבע ירוק.
כולל פרמטרים URL, כותרת…

@Before
public void start() {
    System.setProperty("webdriver.gecko.driver", "C:\\Automation\\Web-drivers\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "C:\\Automation\\Web-drivers\\chromedriver.exe");
    baseUrl="http://localhost/selenium/test.html";
    expectedTitle = "Test page";
    actualChromeTitle = "";
    actualFirefoxTitle = "";
    //Chrome
    chdriver=new ChromeDriver();
    //Firefox
    frdriver=new FirefoxDriver();
}

לאחר מכן יש הרצת בדיקה עצמה,
כאשר actualChromeTitle ו-actualFirefoxTitle
מקבלים כותרת מעמוד HTML בפועל.

ובעזרת if אנו בודקים אם אכן הכל בסדר ונדפיס
הודעה בהתאם.

@Test
 public void BrowserTitle() {
    //Chrome
    chdriver.get(baseUrl);
    actualChromeTitle = chdriver.getTitle();

    //Firefox
    frdriver.get(baseUrl);
    actualFirefoxTitle = frdriver.getTitle();

    if (actualChromeTitle.contentEquals(expectedTitle)){
    System.out.println("Title in Chrome as expected");
    }
    else {
    System.out.println("Title in Chrome not as expected");
    }

    if (actualFirefoxTitle.contentEquals(expectedTitle)){
        System.out.println("Title in Firefox as expected");
    }
    else {
        System.out.println("Title in Firefox not as expected");
    }


}

בסוף – הרצה אחרונה, יש לצאת
מכל drivers.

@After
public void stop() {
chdriver.quit();
frdriver.quit();
}

לסיכום, הקוד יהיה:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.junit.Before;
import org.junit.Test;
import org.junit.After;


public class Run_Browsers {
public static WebDriver chdriver, frdriver;
public static String baseUrl,expectedTitle,actualChromeTitle,actualFirefoxTitle;

@Before
public void start() {
    System.setProperty("webdriver.gecko.driver", "C:\\Automation\\Web-drivers\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "C:\\Automation\\Web-drivers\\chromedriver.exe");
    baseUrl="http://localhost/selenium/test.html";
    expectedTitle = "Test page";
    actualChromeTitle = "";
    actualFirefoxTitle = "";
    //Chrome
    chdriver=new ChromeDriver();
    //Firefox
    frdriver=new FirefoxDriver();
}

@Test
 public void BrowserTitle() {
    //Chrome
    chdriver.get(baseUrl);
    actualChromeTitle = chdriver.getTitle();

    //Firefox
    frdriver.get(baseUrl);
    actualFirefoxTitle = frdriver.getTitle();

    if (actualChromeTitle.contentEquals(expectedTitle)){
    System.out.println("Title in Chrome as expected");
    }
    else {
    System.out.println("Title in Chrome not as expected");
    }

    if (actualFirefoxTitle.contentEquals(expectedTitle)){
        System.out.println("Title in Firefox as expected");
    }
    else {
        System.out.println("Title in Firefox not as expected");
    }


}


    @After
    public void stop() {
    chdriver.quit();
    frdriver.quit();
    }

}

כאשר עמוד HTML שלנו, הוא:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://localhost/html/styles.css">
<title>Test page</title>
</head>
<body>

<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
<p id="p1">I am different</p>

</body>
</html>

בסופו של דבר, נקבל תוצאה שהכל עבר בשלום
בזמן 10 שניות ו-458 מילי שניות:


חיפוש טקסט לפי ID של tag

נמצא אלמנט ש-id שלו הוא: p1

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://localhost/html/styles.css">
<title>Test page</title>
</head>
<body>

<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
<p id="p1">I am different</p>

</body>
</html>

בעזרת:

findElement(By.id("p1")).getText();

אנו מוצאים את האלמנט ומקבלים טקסט: I am different.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.junit.Before;
import org.junit.Test;
import org.junit.After;


public class Run_Browsers {
public static WebDriver chdriver, frdriver;
public static String baseUrl,expectedTitle,actualChromeTitle,actualFirefoxTitle,tagText;

@Before
public void start() {
    System.setProperty("webdriver.gecko.driver", "C:\\Automation\\Web-drivers\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "C:\\Automation\\Web-drivers\\chromedriver.exe");
    baseUrl="http://localhost/selenium/test.html";
    expectedTitle = "Test page";
    actualChromeTitle = "";
    actualFirefoxTitle = "";
    //Chrome
    chdriver=new ChromeDriver();
    //Firefox
    frdriver=new FirefoxDriver();
}

@Test
public void findElementBy() {
    //Chrome
    chdriver.get(baseUrl);
    tagText = chdriver.findElement(By.id("p1")).getText();
    System.out.println(tagText);

    //FireFox
    frdriver.get(baseUrl);
    tagText = frdriver.findElement(By.id("p1")).getText();
    System.out.println(tagText);

}

    @After
    public void stop() {
    chdriver.quit();
    frdriver.quit();
    }

}

תוצאה:  I am different


בדרך דומה ניתן למצוא אלמנטים שונים בעמוד HTML.

אלמנט לפי ClassName.

HTML קוד יהיה:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://localhost/selenium/testCSS.css">
<title>Test page</title>
</head>
<body>

<h2 class="city">Jerusalem</h2>

</body>
</html>

CSS:

.city {
color: Blue;
padding: 10px;
}

Selenium:

By.className , נמצא אלמנט לפי className 

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.junit.Before;
import org.junit.Test;
import org.junit.After;


public class Run_Browsers {
public static WebDriver chdriver, frdriver;
public static String baseUrl,expectedTitle,actualChromeTitle,actualFirefoxTitle,tagText;

@Before
public void start() {
    System.setProperty("webdriver.gecko.driver", "C:\\Automation\\Web-drivers\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "C:\\Automation\\Web-drivers\\chromedriver.exe");
    baseUrl="http://localhost/selenium/test.html";
    expectedTitle = "Test page";
    actualChromeTitle = "";
    actualFirefoxTitle = "";
    //Chrome
    chdriver=new ChromeDriver();
    //Firefox
    frdriver=new FirefoxDriver();
}

@Test
public void findElementBy() {
    //Chrome
    chdriver.get(baseUrl);
    tagText = chdriver.findElement(By.className("city")).getText();
    System.out.println(tagText);

    //FireFox
    frdriver.get(baseUrl);
    tagText = frdriver.findElement(By.className("city")).getText();
    System.out.println(tagText);

}

    @After
    public void stop() {
    chdriver.quit();
    frdriver.quit();
    }

}

כנ"ל יש עוד פקודות:

getTitle() - null / title of the page
getText() - inner text of the element
driver.get("Some URL")
navigate().refresh()
navigate().back()
close() - current window
quit() - all windows
...
..
.

Pop-up Window

HTML

בזמן טעינת HTML עמוד יהיה ALERT:

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://localhost/selenium/testCSS.css">

<script>
 function showAlert()
 {
 alert("This is an alert box.");
 }
 </script>
 
<title>Test page</title>
</head>

<body onload="showAlert()">

</body>
</html>

עכשיו בואו נכתוב JAVA קוד שיקליק על הכפתור OK וגם יקרא טקסט שיש ב-ALERT.

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.junit.Before;
import org.junit.Test;
import org.junit.After;


public class Run_Browsers {
public static WebDriver chdriver, frdriver;
public static String baseUrl,alertMessage;

@Before
public void start() {
    System.setProperty("webdriver.gecko.driver", "C:\\Automation\\Web-drivers\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "C:\\Automation\\Web-drivers\\chromedriver.exe");
    baseUrl="http://localhost/selenium/test.html";
    //Chrome
    chdriver=new ChromeDriver();
    //Firefox
    frdriver=new FirefoxDriver();
}

@Test
public void findElementBy() {
    //Chrome
    chdriver.get(baseUrl);
    alertMessage = chdriver.switchTo().alert().getText();
    chdriver.switchTo().alert().accept();//Like user press OK
    System.out.println(alertMessage);

    //FireFox
    frdriver.get(baseUrl);
    alertMessage = frdriver.switchTo().alert().getText();
    frdriver.switchTo().alert().accept();//Like user press OK
    System.out.println(alertMessage);


}

    @After
    public void stop() {
    chdriver.quit();
    frdriver.quit();
    }

}

יודפס:

This is an alert box.
This is an alert box.