כפי שכבר ראינו בשיעור 8, עלולה להיווצר לנו בעיה כאשר נרצה לעבור לחולונות שאינם חלונות דפדפן, הסלניום לא ידע איך לאכול חלונות כאלו, ובכן בשיעור הקודם ראינו דרך אחת לפתור את העניין, וגם ברשימת הטיפים מופיעה עוד דרך, בשיעור זה נציע דרך נוספת והיא עבודה עם כלי חיצוני שנקרא – AutoIT.

ה-AutoIT הינו כלי חינמי הנועד לאטמט פעולות המבוצעות על חלונות של מערכת ההפעלה, הכלי משתמש בסימולציות של הקשות על מקשים במקלדת, תזוזות עכבר ומניפולציות על חלונות וקונטרולים נוספים, בדומה ל-Selenium IDE גם כלי זה תומך בהקלטות של פעולות וג'ינרוט (generate) סקריפט מאחורי הקלעים.

היתרונות של כלי זה עצומים, הוא מסוגל לסמלץ מקשי מקלדת ותזוזות עכבר כאמור, ניתן בעזרתו לשלוט על החלונות הפתוחים (להגדיל, להזיז, להסתיר וכו'), וכמו כן ניתן גם לשלוט על הפקדים המוכרים – ComboBox, RadioButtons, List ועוד, הסקריפט שנוצר יכול להתקמפל והכלי ייצור ממנו קובץ הרצה (exe)  ואולי הכי חשוב, הוא קל משקל ונוח מאוד ללימוד ועבודה.

הפתרון שלנו לעבודה עם חלונות windows מורכב מכה שלבים: השלב בו אנו מקישים על הכפתור שיקפיץ את החלון (למשל כפתור – העלה קובץ), השלב בו אנו משייכים בקוד את קובץ ה-exe שבוחר קובץ מסויים מהחלון – קובץ זה הוכן מבעוד מועד ע"י AutoIT ונשמר במיקום מסויים אליו נקרא מהתוכנית שלנו, ובשלב האחרון נחזור לתוכנית שלנו בסלניום ונמשיך בפעולות הרגילות.

אז תחילה יש להוריד את הכלי מהאתר הרשמי. נוריד ונתקין את קובץ ה-AutoIt Full Installation:

AutoIT1

AutoIT3

כעת נחזור לדף ההורדות נוריד ונתקין את קובץ AutoIt Script Editor:

AutoIT4

 

כעת אנו יכולים להתחיל ליצור סקריפטים ב-AutoIT, מכיוון ששיעור זה הוא חלק מקורס בסלניום, לא אציג פה כעת כיצד כותבים סקריפט מאפס ב-AutoIT (זה אולי לפוסט נפרד) , אז מה שנעשה כעת יהיה להקליט תסריט בו נבחר קובץ מסויים מחלון ההעלאה ונקליק על כפתור ה-open.

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

 

בשביל להקליט נפתח את הכלי המיועד לזה: תחת – C:\Program Files (x86)\AutoIt3\Extras\Au3Record נפתח את הקובץ : Au3Record.exe

יפתח לנו חלון שנראה כך:

AutoIT5

נסמן ב-V את האופציה השנייה ונלחץ על כפתור ה-Click To Record

במהלך ההקלטה נבחר לנו קובץ מסויים שאותו נרצה להעלות , נלחץ על open:

AutoIT6

ולבסוף נקיש על כפתור סיום ההרצה:

AutoIT7

הסקריפט שנוצר לנו מאחורי הקלעים אמור להיראות כך:

#region --- Au3Recorder generated code Start (v3.3.9.5 KeyboardLayout=00000409)  ---

#region --- Internal functions Au3Recorder Start ---
Func _Au3RecordSetup()
Opt('WinWaitDelay',100)
Opt('WinDetectHiddenText',1)
Opt('MouseCoordMode',0)
Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
If $aResult[1] <> '00000409' Then
  MsgBox(64, 'Warning', 'Recording has been done under a different Keyboard layout' & @CRLF & '(00000409->' & $aResult[1] & ')')
EndIf

EndFunc

Func _WinWaitActivate($title,$text,$timeout=0)
	WinWait($title,$text,$timeout)
	If Not WinActive($title,$text) Then WinActivate($title,$text)
	WinWaitActive($title,$text,$timeout)
EndFunc

_AU3RecordSetup()
#endregion --- Internal functions Au3Recorder End ---

_WinWaitActivate("File Upload","Namespace Tree Contr")
MouseClick("left",386,436,1)
MouseClick("left",1510,837,1)
#endregion --- Au3Recorder generated code End ---

 

נשמור את הסקריפט ונקרא לו test.au3.

בשלב הבא נפתח את הכלי – CompileScript to exe:

AutoIT8

ונמיר אותו לקובץ exe:

AutoIT9

זהו, סיימנו את עבודתנו עם AutoIT , עכשיו יש לנו קובץ exe שמדמה לנו בחירת קובץ מחלון windows.

ניגש לתוכנית הסלניום שלנו ונפעיל את הקובץ הנ"ל מתוכה,בעזרת הפקודה:

Runtime.getRuntime().exec()

 

כאשר הקוד אמור להיראות כך:

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class AutoItTest
{
   private static WebDriver driver = null;
   public static void main(String[] args) throws IOException, InterruptedException
   {
      driver = new FirefoxDriver();
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  // timeout הגדרת
      driver.get("http://blog.yoniflenner.net/?p=435/");     // כניסה לדף הנוכחי
      driver.findElement(By.name("datafile")).click();  // זיהוי כפתור ההעלאה
      Runtime.getRuntime().exec("C:\test\test.exe");    // exe קריאה לקובץ ה
      Thread.sleep(5000);
      driver.close();
   }
}

 

 


arrowBack arrowMain arrowFor

השאר הערה\הודעה