Apache ANT مع السيلينيوم: برنامج تعليمي كامل

ما هو أباتشي النمل؟

أثناء إنشاء منتج برمجي كامل، يحتاج المرء إلى الاهتمام بواجهة برمجة تطبيقات الطرف الثالث المختلفة، ومسار الفئة، وتنظيف الملفات الثنائية السابقة القابلة للتنفيذ، وتجميع كود المصدر الخاص بنا، وتنفيذ كود المصدر، وإنشاء التقارير وقاعدة كود النشر وما إلى ذلك. إذا كانت هذه المهام إذا تم إجراء ذلك واحدًا تلو الآخر يدويًا، فسوف يستغرق الأمر وقتًا طويلاً، وستكون العملية عرضة للأخطاء.

هنا تأتي أهمية أداة البناء مثل Ant. يقوم بتخزين وتنفيذ وأتمتة جميع العمليات بترتيب تسلسلي مذكور في ملف تكوين Ant (عادةً build.xml).

أباتشي النملة

فائدة بناء النملة

  1. يقوم Ant بإنشاء دورة حياة التطبيق، أي التنظيف والتجميع وتعيين التبعية والتنفيذ والإبلاغ وما إلى ذلك.
  2. يمكن تعيين تبعية API لجهة خارجية بواسطة Ant، ​​أي يتم تعيين مسار فئة ملف Jar الآخر بواسطة ملف إنشاء Ant.
  3. يتم إنشاء تطبيق كامل للتسليم والنشر من النهاية إلى النهاية.
  4. إنها أداة بناء بسيطة حيث يمكن إجراء جميع التكوينات باستخدام ملف XML والتي يمكن تنفيذها من سطر الأوامر.
  5. فهو يجعل التعليمات البرمجية الخاصة بك نظيفة لأن التكوين منفصل عن منطق التطبيق الفعلي.

كيفية تثبيت النمل

خطوات تثبيت Ant في Windows على النحو التالي

الخطوة 1) انتقل إلى البرنامج المساعد في التأليف https://ant.apache.org/bindownload.cgi أو قم بتنزيل ملف .zip من أباتشي-النمل-1.9.4-bin.zip

تثبيت النمل

الخطوة 2) قم بفك ضغط المجلد وانتقل إلى المسار وانسخه إلى جذر المجلد الذي تم فك ضغطه

تثبيت النمل

الخطوة 3) انتقل إلى ابدأ -> الكمبيوتر -> انقر بزر الماوس الأيمن هنا وحدد "خصائص" ثم انقر فوق "إعدادات النظام المتقدمة".

تثبيت النمل

الخطوة 4) تفتح نافذة جديدة. انقر فوق الزر "متغير البيئة...".

تثبيت النمل

الخطوة 5) انقر فوق الزر "جديد..." وقم بتعيين اسم المتغير كـ "ANT_HOME" وقيمة المتغير كمسار جذر للمجلد الذي تم فك ضغطه وانقر فوق "موافق".

تثبيت النمل

الخطوة 6) الآن حدد متغير "المسار" من القائمة وانقر فوق "تحرير" وإلحاق؛ %ANT_HOME%\bin.

تثبيت النمل

أعد تشغيل النظام مرة واحدة وستكون جاهزًا لاستخدام أداة Ant build الآن.

الخطوة 7) للتحقق من إصدار Ant الخاص بك باستخدام سطر الأوامر:

نسخة النمل

تثبيت النمل

فهم Build.xml

يعد Build.xml أهم مكون في أداة بناء Ant. ل جافا المشروع، جميع المهام المتعلقة بالتنظيف والإعداد والتجميع والنشر مذكورة في هذا الملف بتنسيق XML. عندما نقوم بتنفيذ ملف XML هذا باستخدام سطر الأوامر أو أي مكون إضافي لـ IDE، سيتم تنفيذ جميع التعليمات المكتوبة في هذا الملف بطريقة تسلسلية.

دعونا نفهم التعليمات البرمجية داخل نموذج build.XML

  • يتم استخدام علامة المشروع لذكر اسم المشروع والسمة المستندة إليه. الأساس هو الدليل الجذر للتطبيق
    <project name="YTMonetize" basedir=".">
  • يتم استخدام علامات الخصائص كمتغيرات في ملف build.XML لاستخدامها في الخطوات الإضافية
<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"/>
  • يتم استخدام العلامات المستهدفة كخطوات سيتم تنفيذها بترتيب تسلسلي. سمة الاسم هي اسم الهدف. يمكن أن يكون لديك أهداف متعددة في ملف build.xml واحد
    <target name="setClassPath">
  • يتم استخدام علامة المسار لتجميع كافة الملفات الموجودة في الموقع المشترك بشكل منطقي
    <path id="classpath_jars">
  • ستقوم علامة pathelement بتعيين المسار إلى جذر الموقع المشترك حيث يتم تخزين كافة الملفات
    <pathelement path="${basedir}/"/>
  • تستخدم علامة pathconvert لتحويل مسارات جميع الملفات الشائعة داخل علامة المسار إلى تنسيق classpath الخاص بالنظام
    <pathconvert pathsep=";" property="test.classpath" refid="classpath_jars"/>
  • تُستخدم علامة مجموعة الملفات لتعيين مسار الفصل لجرة طرف ثالث مختلفة في مشروعنا
    <fileset dir="${ytoperation.dir}" includes="*.jar"/>
  • يتم استخدام علامة الصدى لطباعة النص على وحدة التحكم
<echo message="deleting existing build directory"/>
  • سيؤدي حذف العلامة إلى تنظيف البيانات من المجلد المحدد
<delete dir="${build.dir}"/>
  • ستقوم علامة mkdir بإنشاء دليل جديد
	<mkdir dir="${build.dir}"/>
  • تُستخدم علامة javac لتجميع كود مصدر Java ونقل ملفات .class إلى مجلد جديد
        <javac destdir="${build.dir}" srcdir="${src.dir}">
	<classpath refid="classpath_jars"/>
</javac>
  • ستقوم علامة jar بإنشاء ملف jar من ملفات .class
	<jar destfile="${ytoperation.dir}/YTOperation.jar" basedir="${build.dir}">
  • ستقوم علامة البيان بتعيين صفك الرئيسي للتنفيذ
<manifest>
		<attribute name="Main-Class" value="test.Main"/>
</manifest>
  • السمة "يعتمد" المستخدمة لجعل هدف واحد يعتمد على هدف آخر
<target name="run" depends="compile">
  • ستقوم علامة Java بتنفيذ الوظيفة الرئيسية من الجرة التي تم إنشاؤها في القسم المستهدف للترجمة
<java jar="${ytoperation.dir}/YTOperation.jar" fork="true"/>

تشغيل النمل باستخدام Eclipse المساعد

لتشغيل النملة من eclipse انتقل إلى ملف build.xml -> انقر بزر الماوس الأيمن على الملف -> تشغيل كـ... -> انقر فوق إنشاء ملف

تشغيل النمل باستخدام Eclipse المساعد

مثال

سنأخذ نموذجًا صغيرًا من البرنامج يشرح وظائف Ant بشكل واضح جدًا. سيبدو هيكل مشروعنا كما يلي -

تشغيل النمل باستخدام Eclipse المساعد

هنا في هذا المثال لدينا 4 أهداف

  1. تعيين مسار الفصل للجرار الخارجية،
  2. تنظيف التعليمات البرمجية التي تم الالتزام بها مسبقًا
  3. تجميع كود جافا الموجود
  4. قم بتشغيل الكود

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>				

تشغيل النمل باستخدام Eclipse المساعد

كيفية تنفيذ كود TestNG باستخدام Ant

تنفيذ كود TestNG باستخدام Ant

هنا سوف نقوم بإنشاء فئة مع تستنج الأساليب وتعيين مسار الفصل لـ الاختبار في build.xml.

الآن لتنفيذ طريقة testng، سنقوم بإنشاء ملف testng.xml آخر ونستدعي هذا الملف من ملف build.xml.

الخطوة 1) نقوم بإنشاء ملف "Guru99AntClass.class" في الحزمة testAnt

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();					
	}		
}		

الخطوة 2) قم بإنشاء هدف لتحميل هذه الفئة في Build.xml

<!-- 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) قم بإنشاء testng.xml

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) قم بإنشاء الهدف في Build.xml لتشغيل كود TestNG هذا

<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) ملف 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"/>
<!-- 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) الناتج

تنفيذ كود TestNG باستخدام Ant

قم بتحميل الملف أعلاه

النملة مع السيلينيوم Webdriver

لقد تعلمنا حتى الآن أنه باستخدام ANT يمكننا وضع جميع الجرار التابعة لجهات خارجية في مكان معين في النظام وتحديد مسارها لمشروعنا. باستخدام هذه الطريقة، نقوم بتعيين جميع تبعيات مشروعنا في مكان واحد ونجعله أكثر موثوقية للتجميع والتنفيذ والنشر.

وبالمثل، بالنسبة لمشاريع الاختبار الخاصة بنا التي تستخدم السيلينيوم، يمكننا بسهولة أن نذكر تبعية السيلينيوم في build.xml ولا نحتاج إلى إضافة مسار فئة له يدويًا في تطبيقنا.

يمكنك الآن تجاهل الطريقة التقليدية المذكورة أدناه لتعيين مسارات الفئات للمشروع.

النملة مع السيلينيوم Webdriver

على سبيل المثال:

سنقوم بتعديل المثال السابق

الخطوة 1) قم بتعيين الخاصية selenium.jars على الجرة ذات الصلة بالسيلينيوم في مجلد الموارد

		<property name="selenium.jars" value=".\selenium"/>

الخطوة 2) في setClassPath الهدف، قم بإضافة ملفات السيلينيوم

<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) إكمال ملف 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"/>
      <!-- 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) الآن قم بتغيير الفئة التي تم إنشاؤها مسبقًا Guru99AntClass.java برمز جديد.

هنا في هذا المثال خطواتنا باستخدام السيلينيوم هي:

  1. انتقل إلى البرنامج المساعد في التأليف http://demo.guru99.com/test/guru99home/
  2. اقرأ روابط جميع الدورات واحدة تلو الأخرى
  3. طباعة الارتباط التشعبي لجميع الدورات التدريبية على وحدة التحكم.

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) بعد التنفيذ الناجح سيبدو الإخراج كما يلي:

النملة مع السيلينيوم Webdriver

قم بتنزيل ملف المثال أعلاه

نبذة عامة

Ant هي أداة بناء لجافا.

النملة تستخدم لتجميع التعليمات البرمجية ونشرها وعملية التنفيذ.

يمكن تحميل النمل من أباتشي موقع الكتروني.

يستخدم ملف Build.xml لتكوين أهداف التنفيذ باستخدام Ant.

يمكن تشغيل Ant من سطر الأوامر أو من خلال مكون إضافي مناسب لـ IDE eclipse.