Apache ANT ile Selenium: Öğreticiyi Tamamla
Apache Karınca Nedir?
Eksiksiz bir yazılım ürünü oluştururken, farklı üçüncü taraf API'lerine, sınıf yollarına, önceki yürütülebilir ikili dosyaların temizlenmesine, kaynak kodumuzu derlemeye, kaynak kodun yürütülmesine, raporların oluşturulmasına ve dağıtım kodu tabanına vb. Dikkat edilmesi gerekir. tek tek manuel olarak yapıldığında çok fazla zaman alacaktır ve süreç hatalara açık olacaktır.
İşte Ant gibi bir inşa aracının önemi burada ortaya çıkıyor. Tüm işlemleri Ant'ın yapılandırma dosyasında (genellikle build.xml) belirtilen sırayla saklar, yürütür ve otomatikleştirir.
Ant yapısının faydası
- Ant, uygulamanın yaşam döngüsünü oluşturur; yani temizleme, derleme, bağımlılığı ayarlama, yürütme, raporlama vb.
- Üçüncü taraf API bağımlılığı Ant tarafından ayarlanabilir, yani diğer Jar dosyasının sınıf yolu Ant derleme dosyası tarafından belirlenir.
- Uçtan uca teslimat ve dağıtım için eksiksiz bir uygulama oluşturulur.
- Tüm konfigürasyonların XML dosyası kullanılarak yapılabildiği ve komut satırından çalıştırılabilen basit bir derleme aracıdır.
- Yapılandırma gerçek uygulama mantığından ayrı olduğundan kodunuzu temiz hale getirir.
Ant nasıl kurulur
Ant'ı yükleme adımları Windows Şöyleki
) 1 Adım MyCAD'de yazılım Güncelleme ye git https://ant.apache.org/bindownload.cgi Veya .zip dosyasını şuradan indirin: apache-ant-1.9.4-bin.zip
) 2 Adım Klasörü açın ve sıkıştırılmış klasörün kök dizinine gidin ve yolu kopyalayın
) 3 Adım Başlat -> Bilgisayar -> buraya sağ tıklayın ve 'Özellikler'i seçin, ardından Gelişmiş Sistem Ayarları'na tıklayın
) 4 Adım Yeni bir pencere açılır. 'Ortam Değişkeni…' düğmesine tıklayın.
) 5 Adım 'Yeni…' düğmesine tıklayın ve değişken adını 'ANT_HOME' olarak, değişken değerini ise sıkıştırılmış klasörün kök yolu olarak ayarlayın ve Tamam'a tıklayın.
) 6 Adım şimdi listeden 'Yol' değişkenini seçin ve 'Düzenle'yi tıklayın ve ekleyin; %ANT_HOME%\bin.
Sistemi bir kez yeniden başlattığınızda artık Ant derleme aracını kullanmaya hazırsınız.
) 7 Adım Ant'ınızın sürümünü komut satırını kullanarak kontrol etmek için:
Karınca versiyonu
Build.xml'i Anlamak
Build.xml, Ant build aracının en önemli bileşenidir. bir için Java proje, temizlik, kurulum, derleme ve dağıtımla ilgili tüm görevlerden XML formatında bu dosyada bahsedilmektedir. Bu XML dosyasını komut satırını veya herhangi bir IDE eklentisini kullanarak çalıştırdığımızda, bu dosyaya yazılan tüm talimatlar sıralı bir şekilde yürütülecektir.
Örnek build.XML içindeki kodu anlayalım
-
Proje etiketi, bir proje adını ve basedir özelliğini belirtmek için kullanılır. Basedir bir uygulamanın kök dizinidir
<project name="YTMonetize" basedir=".">
- Özellik etiketleri build.XML dosyasında ileriki adımlarda kullanılacak değişkenler olarak kullanılır
<property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/>
- Target sıralı düzende yürütülecek adımlar olarak kullanılan etiketler. Ad niteliği hedefin adıdır. Tek bir build.xml'de birden fazla hedefiniz olabilir
<target name="setClassPath">
- yol etiketi, ortak konumdaki tüm dosyaları mantıksal olarak paketlemek için kullanılır
<path id="classpath_jars">
- pathelement etiketi, tüm dosyaların depolandığı ortak konumun köküne giden yolu ayarlayacaktır.
<pathelement path="${basedir}/"/>
- pathconvert etiketi, yol etiketi içindeki tüm ortak dosyaların yollarını sistemin sınıf yolu formatına dönüştürmek için kullanılır
<pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
- projemizdeki farklı üçüncü taraf jar için sınıf yolunu ayarlamak için kullanılan dosya kümesi etiketi
<fileset dir="${ytoperation.dir}" includes="*.jar"/>
- Yankı etiketi, konsoldaki metni yazdırmak için kullanılır
<echo message="deleting existing build directory"/>
- Etiketi sil, verilen klasördeki verileri temizleyecektir
<delete dir="${build.dir}"/>
- mkdir etiketi yeni bir dizin oluşturacaktır
<mkdir dir="${build.dir}"/>
- Java kaynak kodunu derlemek ve .class dosyalarını yeni bir klasöre taşımak için kullanılan javac etiketi
<javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac>
- jar etiketi .class dosyalarından jar dosyası oluşturacaktır
<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
- manifest etiketi ana sınıfınızı yürütülmek üzere ayarlayacaktır
<manifest> <attribute name="Main-Class" value="test.Main"/> </manifest>
- Bir hedefin başka bir hedefe bağımlı olmasını sağlamak için kullanılan 'bağımlıdır' özelliği
<target name="run" depends="compile">
- Java etiketi, derleme hedefi bölümünde oluşturulan kavanozdan ana işlevi yürütecektir
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>
Ant'ı kullanarak çalıştırın Eclipse fişe takmak
Ant'i Eclipse'den çalıştırmak için build.xml dosyasına gidin -> dosyaya sağ tıklayın -> Farklı çalıştır… -> Dosyayı oluştur'a tıklayın
Örnek E-posta
Ant işlevselliğini çok net bir şekilde anlatacak küçük bir örnek program alacağız. Proje yapımız şöyle görünecek:
Bu örnekte 4 hedefimiz var
- Harici kavanozlar için sınıf yolunu ayarlayın,
- Daha önce uyulan kodu temizleyin
- Mevcut Java kodunu derleyin
- kodu çalıştır
Guru99AntClass.class
package testAnt; import java.util.Date; public class Guru99AntClass { public static void main(String...s){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <property name="external.jars" value=".\resources"/> <property name="ytoperation.dir" value="${external.jars}/YTOperation"/> <property name="src.dir"value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and < a name=OLE_LINK1 >'depends' attribute used to make one target to depend on another target --> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> </path> <pathconvert pathsep=";"property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}" srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> <!--jar tag will create jar file from .class files--> <jar destfile="${ytoperation.dir}/YTOperation.jar"basedir="${build.dir}"> <!--manifest tag will set your main class for execution--> <manifest> <attribute name="Main-Class" value="testAnt.Guru99AntClass"/> </manifest> </jar> </target> <target name="run" depends="compile"> <!--java tag will execute main function from the jar created in compile target section--> <java jar="${ytoperation.dir}/YTOperation.jar"fork="true"/> </target> </project>
Nasıl Yürütülür TestNG Ant kullanarak kod
Burada bir sınıf oluşturacağız. Test yöntemleri ve sınıf yolunu ayarlayın Test yapmak build.xml'de.
Şimdi testng yöntemini çalıştırmak için başka bir testng.xml dosyası oluşturacağız ve bu dosyayı build.xml dosyasından çağıracağız.
) 1 Adım Bir yaratıyoruz “Guru99AntClass.class” pakette testkarınca
Guru99AntClass.class
package testAnt; import java.util.Date; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ System.out.println("HELLO GURU99 ANT PROGRAM"); System.out.println("TODAY's DATE IS->"+ currentDate() ); } public static String currentDate(){ return new Date().toString(); } }
Adım 2) Bu sınıfı Build.xml'e yüklemek için bir hedef oluşturun
<!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <!—using taskdef tag we can add a task to run on the current project. In below line, we are adding testing task in this project. Using testing task here now we can run testing code using the ant script --> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target>
) 3 Adım testng.xml oluştur
testng.xml
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="YT"thread-count="1"> <test name="GURU99TestNGAnt"> <classes> <class name="testAnt.Guru99AntClass"> </class> </classes> </test> </suite>
) 4 Adım oluşturmak Target Bunu çalıştırmak için Build.xml'de TestNG kod
<target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file. Here classpath attribute is setting classpath for testng's jar to the project--> <testng classpath="${test.classpath};${build.dir}"> <!—xmlfileset tag is used here to run testng's code using testing.xml file. Using includes tag we are mentioning path to testing.xml file--> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng>
) 5 Adım Build.xml'in tamamı
<?xml version="1.0"encoding="UTF-8"standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir"value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG"depends="setClassPath"> <taskdef resource="testngtasks"classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> </path> <pathconvert pathsep=";"property="test.classpath"refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile"depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to a new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt"depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}"includes="testng.xml"/> </testng> </target> </project>
) 6 Adım Çıktı
Karınca ile Selenium Web sürücüsü
Şu ana kadar ANT kullanarak tüm üçüncü taraf jar'ları sistemde belirli bir konuma yerleştirebileceğimizi ve projemiz için yollarını belirleyebileceğimizi öğrendik. Bu yöntemi kullanarak projemizin tüm bağımlılıklarını tek bir yere koyuyoruz ve onu derleme, yürütme ve dağıtım açısından daha güvenilir hale getiriyoruz.
Benzer şekilde selenyum kullanan test projelerimiz için build.xml dosyasında selenyum bağımlılığından kolaylıkla bahsedebiliriz ve bunun sınıf yolunu uygulamamıza manuel olarak eklememize gerek yoktur.
Artık proje için sınıf yollarını ayarlamanın aşağıda belirtilen geleneksel yolunu göz ardı edebilirsiniz.
Örnek:
Önceki örneği değiştireceğiz
) 1 Adım Selenium.jars özelliğini kaynak klasöründeki Selenyum ile ilgili jar olarak ayarlayın
<property name="selenium.jars" value=".\selenium"/>
) 2 Adım Hedef setClassPath'e selenyum dosyalarını ekleyin
<target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}" includes="*.jar"/> </path>
) 3 Adım Build.xml'yi tamamlayın:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--Project tag used to mention the project name, and basedir attribute will be the root directory of the application--> <project name="YTMonetize" basedir="."> <!--Property tags will be used as variables in build.xml file to use in further steps--> <property name="build.dir" value="${basedir}/build"/> <!-- put testng related jar in the resource folder --> <property name="external.jars" value=".\resource"/> <!-- put selenium related jar in resource folder --> <property name="selenium.jars" value=".\selenium"/> <property name="src.dir" value="${basedir}/src"/> <!--Target tags used as steps that will execute in sequential order. name attribute will be the name of the target and 'depends' attribute used to make one target to depend on another target--> <!-- Load testNG and add to the class path of application --> <target name="loadTestNG" depends="setClassPath"> <taskdef resource="testngtasks" classpath="${test.classpath}"/> </target> <target name="setClassPath"> <path id="classpath_jars"> <pathelement path="${basedir}/"/> <fileset dir="${external.jars}" includes="*.jar"/> <!-- selenium jar added here --> <fileset dir="${selenium.jars}"includes="*.jar"/> </path> <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/> </target> <target name="clean"> <!--echo tag will use to print text on console--> <echo message="deleting existing build directory"/> <!--delete tag will clean data from given folder--> <delete dir="${build.dir}"/> </target> <target name="compile" depends="clean,setClassPath,loadTestNG"> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--mkdir tag will create new director--> <mkdir dir="${build.dir}"/> <echo message="classpath:${test.classpath}"/> <echo message="compiling.........."/> <!--javac tag used to compile java source code and move .class files to new folder--> <javac destdir="${build.dir}"srcdir="${src.dir}"> <classpath refid="classpath_jars"/> </javac> </target> <target name="runGuru99TestNGAnt" depends="compile"> <!-- testng tag will be used to execute testng code using corresponding testng.xml file --> <testng classpath="${test.classpath};${build.dir}"> <xmlfileset dir="${basedir}" includes="testng.xml"/> </testng> </target> </project>
) 4 Adım Şimdi önceden oluşturulan Guru99AntClass.java sınıfını yeni kodla değiştirin.
İşte bu örnekte kullandığımız adımlarımız Selenium şunlardır:
- MyCAD'de yazılım Güncelleme ye git
http://demo.guru99.com/test/guru99home/
- Tüm derslerin bağlantılarını tek tek okuyun
- Tüm derslerin köprüsünü konsolda yazdırın.
Guru99AntClass.java:
package testAnt; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class Guru99AntClass { @Test public void Guru99AntTestNGMethod(){ WebDriver driver = new FirefoxDriver(); driver.get("http://demo.guru99.com/test/guru99home/"); List<WebElement> listAllCourseLinks = driver.findElements(By.xpath("//div[@class='canvas-middle']//a")); for(WebElement webElement : listAllCourseLinks) { System.out.println(webElement.getAttribute("href")); } } }
) 5 Adım Başarılı bir yürütmeden sonra çıktı şöyle görünecektir:
Yukarıdaki Örnek Dosyayı İndirin
ÖZET
Ant, aşağıdakiler için bir oluşturma aracıdır: Java.
Ant, kod derleme, dağıtım ve yürütme işlemleri için kullanılır.
Karınca şuradan indirilebilir: Apache https://serdartavaslioglu.com sitesi üzerinden ücretsiz erişebilirseniz.
Ant kullanarak yürütme hedeflerini yapılandırmak için kullanılan Build.xml dosyası.
Ant komut satırından veya Eclipse gibi uygun bir IDE eklentisi kullanılarak çalıştırılabilir.