Selenium API ve Obje Hareketleri

Merhaba arkadaşlar, Mobilhanem.com üzerinde Selenium ile Test Otomasyonu Geliştirme serimizin dokuzuncu dersinde Selenium API ve Obje Hareketleri konusuna değineceğim. Bir önceki dersimizde Maven ile Junit Entegrasyonu konusunu ele almıştık. Selenium API ve Obje Hareketleri konusuna bu ders serimizin her içeriğinde ufak ufak bahsetmeye başlamıştık. Bu dersimizde konu ile ilgili alt başlıklara daha detaylı giriş yapacağız. Öncelikle Selenium API nedir nereler de kullanılır bunu görelim.

Selenium API ve Obje Hareketleri Nedir ?

Selenium API

Selenium tarayıcı üzerinden otomasyon yazmamıza yardımcı olan bir araçtır. Örneğin bir websiteniz var burada birden fazla butonlar ve fonksiyonlar bulunmakta. Siz bu sitedeki bütün fonksiyonları kendiniz test etmek yerine Selenium API yardımı  ile ve WebDriver API sayesinde tek tek işlemleri sanal tarayıcı ile izleyip bunları fonksiyon haline getirebilirsiniz. Çıktı olarak da bir test otomasyonu yazabilirsiniz.

Selenium’dan bahsediliyor ama Katalon’u kullanıyorsunuz diye aklınıza bu soru gelebilir. Katalon, Selenium API  kullanılarak yazılmış başka bir eklenti programıdır. Selenium’a gelen son geliştirmelerden sonra export özelliği kaldırılmıştır fakat Katalon’da farklı dillerde yapılan obje hareketlerinin çıktısını alabiliyoruz . Bu kolaylıktan dolayı Katalon’u kullanmayı tercih ediyoruz.

Obje Hareketleri

Selenium ile test otomasyonu yazmaya başladığımızda en çok kullanıdığımız elementler; click, clear, sendKeys vb. gibi elementlerdir. Fakat bazı durumlarda bu elementler yardımcı olamamaktadır. Örneğin, alt menüsü olan bir menüye açmak  istediğimizde Katalon Recoder bunun sadece click olayını ve xpath olayını kaydeder. Mouse’umuzun o menünün üzerine geldiğinde menünün açılmasını kaydetmemektedir. Bu tür durumlarda farklı elementleri kullanmamız gerekmektedir. Daha açıklayıcı olması açıcından başka bir örnek verelim. Sitenize upload yapılmasının bir testini Katalon Recorder da gerçekleştirdiğinizde yüklenilecek olan dosyanın yolunu fake path olarak kabul eder sonrasında bu dosyayı yükleme butonu windowsun penceresinde gerçekleştirildiği için buradaki obje hareketlerini kaydetmez ve testinizi koşmaya başladığınızda hatalar ile karşılaşırsınız . Bunlardan biri path’in olmaması bunu test otomasyonu yazarken kolaylık ile değiştirebilirsiniz fakat dosyayı seçtikten sonra yükleme işlemi için farklı obje hareketlerini kullanmanız gerekecektir.

İlk örneğimizde testmobilhanem.com.tr sitesinde ki menu üzerinden örnek verdim. Sizler herhangi bir sitede alt menüsü olan bir menüyü açmak istediğiniz de aşağıda bulunan yapıyı kullanabilirsiniz.

Selenium API ve Obje Hareketleri
Selenium API ve Obje Hareketleri – 1

Yukarıda görmüş olduğunuz Anasayfa menüsünün altında farklı menüler yer almaktadır. Burada gösterilmiş olan menüyü açma kısmında cssSelector yardımı ile o menünün xpath’ini bulmaya çalışalım. Herhangi bir tarayıcıda test etmek istediğiniz web sitesini açın. Açmış olduğunuz web sitesindeyken f12 yardımı ile veya menüye sağ tıklayarak öğeyi incele kısmından o kod bloğunu açalım. Aşağıda ki görseli örnek alabilirsiniz.

Selenium API ve Obje Hareketleri
Selenium API ve Obje Hareketleri – 2

Burada Anasayfa yazısının üzerine geldiğimizde bu tree’nin açılmasını sağlayan html objesi li’dir. Bize lazım olan li’nin id’sidir. Onunda görselden anlaşılacağı gibi menu-item-15 olduğunu görüyoruz.

Selenium API ve Obje Hareketleri
Selenium API ve Obje Hareketleri – 3

Bu bilgileri bulduktan sonra gelelim projemizde bu kısmı oluşturmaya. Öncelikle maven projesi oluşturalım oluşturulan maven projesinde pom.xml sayfasına kütüphanelerimizi eklemeyi unutmayalım. İlgili Kütüphaneler;

<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.1.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Sonrasında test klasörü altında bir java class oluşturalım. Oluşturduktan sonra aşağıda yer alan kodları inceleyelim.

import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

import javax.swing.*;

import static java.util.concurrent.TimeUnit.SECONDS;

public class DropDownMenu {
    public static WebDriver driver;
    private static String baseUrl;
    @Before
    public void setUp() throws Exception {

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\aybukeka\\Desktop\\selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        baseUrl = "https://test.mobilhanem.com.tr/";

        driver.manage().timeouts().implicitlyWait(10, SECONDS);
        driver.manage().timeouts().pageLoadTimeout(200, SECONDS);
    }

    @Test
    public void dropDownMenu() throws Exception {
        driver.get(baseUrl);
        Actions actions = new Actions(driver);
        actions.moveToElement(driver.findElement(By.cssSelector("li[id='menu-item-15']"))).build().perform();

    }

}

Sonrasında ise java sınıfımızı çalıştırdığımızda istediğimiz sonucu elde ettiğimizi göreceğiz.

Selenium API ve Obje Hareketleri
Selenium API ve Obje Hareketleri – 4

Yukarıdaki örneğimizde Actions sınıfını kullanarak mouse hareketlerini nasıl oluşturacağımızı görmüş olduk. Bu örnekleri sizlerde farklı sitelerde deneyebilirsiniz. Katalon Recode rile kontrol edemediğimiz sıkça kullanmış olduğumuz bir Robot sınıfı vardır. Peki bu robor sınıfı nedir ve bunun ile neler yapılır onu görelim.

Robot Sınıfı Nedir ?

Selenium Otomasyon testleri sırasında recoderlar ile kontrol edemediğimiz bazı durumlar vardır. Örneğin; indirmeler, resim kaydetme, resim yükleme, uyarılar, printer işlemleri, skype, hesap makinesi gibi . İşletim sisteminin arayüzlerini kontrol edebilmek için klavye veya mouse hareketlerini kontrol etmeye ihtiyaç duyarız. Java 1.3 sürümünde bu ihtiyaçları gidermek adına Robot Sınıfı tanıtıldı.

Robot sınıfını kullanarak klavye ,mouse hareketlerini oluşturabiliyoruz. Bunun ile ilgili ilk örneğimiz file upload işlemidir. Aşağıda bulunan kod bloğunda Robot sınıfının nasıl kullanılacağı ve klavye tuşları ile nasıl etkileşim haline getireleceği gösterilmiştir.

import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;

import static java.util.concurrent.TimeUnit.SECONDS;

public class FileUpload {
    public static WebDriver driver;
    private static String baseUrl;
    @Before
    public void setUp() throws Exception {

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\aybukeka\\Desktop\\selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        baseUrl = "https://sorucevap.mobilhanem.com/giris-yap/";

        driver.manage().timeouts().implicitlyWait(10, SECONDS);
        driver.manage().timeouts().pageLoadTimeout(200, SECONDS);
        driver.manage().window().maximize();
    }


    @Test
    public void fileUpload() throws Exception {
        driver.get(baseUrl);
        driver.findElement(By.xpath("//div[@id='wrap']/section/div/div/div/div/div/div[2]/div/div")).click();
        JavascriptExecutor js = (JavascriptExecutor)driver;
        js.executeScript("scroll(0,350)");
        driver.findElement(By.xpath("//button[@type='button']")).click();

        uploadFileWithRobot("C:\\Users\\aybukeka\\Desktop\\res.png");

    }
    public void uploadFileWithRobot (String imagePath) {
        StringSelection stringSelection = new StringSelection(imagePath);
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(stringSelection, null);

        Robot robot = null;

        try {
            robot = new Robot();
        } catch (AWTException e) {
            e.printStackTrace();
        }

        robot.delay(250);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.delay(150);
        robot.keyRelease(KeyEvent.VK_ENTER);
    }

}

Mobilhanem.com da Selenium ile Test Otomasyonu Geliştirme serisinin bu dersinde Selenium API ve Obje Hareketleri adlı dersimizin sonuna geldik. Eksik ya da yanlış gördüğünüz veya anlamadığınız yerler için çekinmeden ulaşabilirsiniz. Bir sonraki yazımızda görüşmek üzere.

Tüm Selenium derslerimiz için tıklayınız.

19

Sevde Aybüke Kaleli

DevOps Engineer at Evam, M.Sc.

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?