Automatic Script

ครั้งนึงกับการ Automate Script ด้วย Sikuli

จริง ๆ แล้ว Blog นี้ไม่ได้มีสาระอะไรเท่าไหร่นะครับ มันเกิดจากผมเองอยากจะเก็บข้อมูลเกี่ยวกับสิ่งที่ผมลองเล่นไปเมื่อวาน เผื่อว่าวันหลังอาจจะต้องทำอะไรแบบนี้อีก ประเด็นมันเกิดขึ้นจากมีเหตุที่ผมจะต้องเข้าไปใช้งานระบบ ๆ นึงบน Lotus Note Workflow ของบริษัท แถมจะต้องเข้าไปทำ Workflow นั้น ประมาณ 30 รอบเป็นอย่างน้อย ลองมานั่งนึกดูว่าถ้าต้องกรอกข้อมูลเยอะ ๆ แบบนั้น แล้วต้องทำเยอะ ๆ ขนาดนั้น แค่คิดผมก็เมื่อยมือแล้ว (ไม่นับรวมที่ต้องเสียเวลานั่งทำอะไรแบบนี้อะนะ) …

7732137962_b956cdb79b

นึกถึง MarkSpec

ด้วยสันดานขี้เกียจของผมเอง เลยมานั่งคิดว่าถ้าเป็น Web App นะ กูจัด Robot + Selenium ไปแล้ว แต่นี่เป็น Windows App แถมอยู่บน Lotus Note Workflow ซะอีก ไป ๆ มา ๆ นึกถึง SUT MarkSpec ของอาจารย์ Chanwit (เจ้าพ่อแห่ง Cloud & Docker และ “ไอยรา คลัสเตอร์“) ที่เคยออกมาให้ลองใช้ในช่วง ปี 2013 ซึ่งน่าจะสามารถตอบโจทย์ที่เจออยู่ได้ เพราะไม่สนใจว่าจะเป็น Win App หรือ Web App แต่ใช้การเปรียบเทียบสิ่งที่เห็นบนหน้าจอ + การทำ Action เพื่อตอบสนองต่อสิ่งที่เห็นนั้น แถมตอนนั้นยังสามารถ Generate ออกมาเป็น Activity Spec + User Manual ได้ ผมนี่รีบหาข้อมูล เพื่อเอา MarkSpec มาลงในเครื่องเลย แต่หลังจากที่ลอง Search ลองมั่วตามภาษาผมมาได้สักพักนึงแล้ว (ตอนแรกจำชื่อไม่ได้) ก็ไปเจอ Link ที่ต้องการ https://sites.google.com/site/chanwit/markspec แต่หลังจากใช้เวลาพยายามอยู่สักพักนึง ผมก็ยังไม่สามารถ Download มันมาติดตั้งบนเครื่องได้ ถึงขั้นท้อ แล้วก็กำลังจะกลับไปนั่งพิมพ์นั่งกรอกฟอร์มที่ว่าจนมือหงิกมืองอ แบบที่กังวลไว้ตอนแรก ทันใดนั้นเองผมก็แอบไปเห็นในหน้า Web ของ MarkSpec เองก็มีข้อมูลที่บอกว่า “ระบบ editor ของ มาร์คสเปค สร้างและปรับปรุงจาก Dillinger และ Ace Editor สำหรับระบบ ATDD ใช้ Spock เป็นฐานของโปรแกรมข้อกำหนด และใช้ Sikuli เป็นตัวควบคุมและประมวลผลภาพ” ด้วยเหมือนมีแสงที่ปลายอุโมงค์ ผมจึงรีบเอา Keyword ที่เห็น มา Search ต่อทันที

markspec_100m4

Sikuli Script ??

ด้วยโจทย์เรื่อง Script ที่จะสามารถเอามารัน Automate แล้วก็สามารถ Capture ผลจากภาพที่แสดงบนหน้าจอได้ ผมเลยมองข้าม Keyword หลาย ๆ ตัวที่ผมเห็นจาก Web MarkSpec ของ อาจารย์ Chanwit จนได้ Keyword ตัวนึงที่น่าสนใจ นั่นก็คือ Sikuli แล้วก็เริ่มพบว่าจากตอนนั้น ถึงตอนนี้ มันเริ่มมีการกลายร่างไปหลายอย่าง ทั้ง SikuliX, Sikuli Slides รวมถึง Sikuli IDE ซึ่ง ทั้งหมดนั้นยังทำงานอยู่บน ภาษา Script ที่เขาสร้างไว้ ก็คือ Sikuli Script (แปลมั่ว ๆ แต่ด้วยความอ่อนเรื่องภาษา) และด้วยความที่ไม่อยากจะใช้เวลากับมันมาก ๆ เลยกลับมา Focus ที่ Sikuli IDE ซึ่งน่าจะเป็น IDE ที่สามารถให้เราเขียน Sikuli Script ได้โดยไม่ต้องเรียนรู้อะไรมาก (หลังจากที่เคยเรียนรู้ MarkSpec มาบ้างแล้ว)  ว่าแล้วก็ …

Download + Install Sikuli IDE

ช่วงเวลานี้เป็นช่วงเวลาที่ผมมึนพอสมควรเพราะเหมือนมีแหล่งให้ Download อยู่หลายแหล่งพอสมควร แต่จุดสุดท้ายที่ผมไป Download มา มี File ที่เราจำเป็นต้องใช้เพื่อเริ่มต้นก็คือ sikuli-setup.jar แต่จากข้อมูลที่อยู่ใน Web ของ Sikuli เอง ก่อนจะ Install ในเครื่องอาจจะจำเป็นต้องมี JRE/JDK Version 6 หรือ 7 อยู่ก่อนแล้วนะครับ ซึ่ง File ที่จะต้อง Download ของ Sikuli สามารถ Download ได้จาก URL ข้างล่างนี้ครับ

https://launchpad.net/sikuli/+download -> sikuli-setup.jar (md5)

download_sikuli_setup

หลังจาก Download มาแล้ว ก็เริ่มจากการรัน sikuli-setup.jar (ผมนี่ Double Click เลย) และ ทำตามขั้นตอนที่มันบอกอะนะครับ

1-sikuli-setup-info

มันจะแตก File มาให้ประมาณนี้2-sikuli-setup-extracted

สั้งรัน runSetup.cmd ต่อเลยครับ (ผมก็ Double Click อีกนั่นแหละ)4-sikuli-setup-command

แน่นอนว่าถ้ามันถาม Confirm อะไรก็ตอบ Yes  ๆ ๆ ไปนะฮะ5-sikuli-setup-download-confirm

กำลัง Download Sikuli IDE มาลงที่เครื่อง6-sikuli-setup-download-progress

เสร็จแล้วววววววว7-sikuli-setup-download-completed

เริ่ม Sikuli Script แบบง่าย ๆ

มาถึงตรงนี้ก็แปลว่าเรา Setup Sikuli IDE เรียบร้อยพร้อมสำหรับการเริ่มเขียน Script สำหรับ ที่จะเอามารัน Automate Script ที่คาดหวังแล้ว มาลองเปิด IDE แล้วลองเขียนคำสั่งง่าย ๆ กันดูฮะ

เริ่มจากเปิด IDE ด้วยการรัน runIDE.cmd

8-sikuli-ide

จะเปิดเป็น Sikuli IDE หน้าตาประมาณนี้ครับ 9-ide-workspace

ถ้าลองสังเกตดูดี ๆ Sikuli IDE จะแบ่งออกเป็น 3 ส่วน (เหมือน ๆ  IDE ทั่ว ๆ ไป)

  • แถบ Command ด้านซ้าย
  • Menu + Toolbar ด้านบน
  • Console ที่แสดง Status การรัน ข้างล่าง

วิธีการเขียนผ่าน IDE ก็ไม่ยากครับ ผมจะยกตัวอย่างโดยการเปิด Firefox เข้า Google แล้วกันนะครับ โดยผมทำตามขั้นตอนประมาณนี้

  1. ร่าง ๆ Step คร่าว ๆ ก่อน : ก็น่าจะประมาณ เปิด Firefox -> พิมพ์ URL -> แล้วก็ตรวจสอบว่าหน้าจอโผล่มาไหม
  2. แปลงทีละ Step เป็น Action ที่ทำกับหน้าจอ
  3. Step แรกผมก็ให้ Click Icon “Firefox” บนหน้าจอ โดยการกด click(รูปกล้อง) ใน แถบด้านซ้าย ซึ่งมันจะ Switch ไปที่หน้าจอที่เปิดไว้แล้ว ขึ้นให้เรา Select an image โดยให้เรา Crop บริเวณที่เรา Click นั้น ๆ

91-capture

หลังจากนั้นก็ Repeat Step ที่ 3 ไปครับ จะใช้ Click ใช้ Wait ใช้ Text ก็ตามแต่ Step ที่ต้องทำ ซึ่งของผมก็ออกมาได้คร่าว ๆ ประมาณ รูปด้านล่างนี้ เวลาที่ต้องการจะรัน Script ก็แค่กดรันได้เลย

10-simple-script

ซึ่งนอกจากเราจะใส่ Command ที่เขาให้มาแล้ว เรายังใส่ Command ที่เป็น Logic ต่าง ๆ ได้ด้วย โดยส่วนตัวผมเข้าใจว่าใช้ syntax เดียวกับ python เช่นจะให้ Loop ก็สามารถใส่อะไรประมาณนี้ได้เช่นกัน

myListFixed = (“19/12/2016”, “20/12/2016”, “21/12/2016”)
for entry in myListFixed:

click(image.jpg)

สรุป

จริง ๆ ก็อย่างที่ผมบอก มันเป็นการลองเล่น Tools สำหรับรัน Automate Script อีกตัวนึงของผมเท่านั้น แต่จากที่ลองเล่นดูแล้ว มันเป็น Tools ที่ Powerful พอสมควร เพราะง่ายต่อการใช้งาน ในการ Capture การทำงานต่าง ๆ แล้วเอามารัน Automatic ไม่ต้องเสียแรงคนในการทำงานบางอย่างซ้ำ ๆ แต่การที่จะใช้มันให้ได้อย่างมีประสิทธิภาพจริง ๆ ก็คงต้องลองศึกษาลองเล่นมันดูเอาครับ แต่เรื่องทั้งหมดที่ผมลองเล่นมานี่ก็เพราะความขี้เกียจส่วนตัวของผมเอง ทำให้ผมนึกถึงคำพูดที่เคยได้ยินมาหลาย ๆ ครั้งซึ่งมักจะเป็นจริงเสมอ

นวัตกรรมใหม่ ๆ ที่เกิดขึ้นบนโลก ส่วนนึงก็มาจากความขี้เกียจเนี่ยแหละ …

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s