Minggu, 24 Februari 2013

FAQ Sikuli : How to run Sikuli from Command Line

Sikuli IDE can be used on command line to run a Sikuli script or a Sikuli test case.
The usage on each platform:

Windows
PATH-TO-SIKULI/sikuli-ide.exe [options] or
PATH-TO-SIKULI/sikuli-ide.bat [options]

Mac OS X
/Applications/Sikuli-IDE.app/sikuli-ide.sh [options]

Linux
PATH-TO-SIKULI/sikuli-ide.sh [options]

Command Line Options

Sikuli-IDE
--args <arguments>
specify the arguments passed to Jython’s sys.argv
-h,--help
print this help message
usage:
Sikuli-IDE [--args <arguments>] [-h] [-r <sikuli-file>] [-s] [-t <sikuli-file>]
 --args <arguments>             specify the arguments passed to Jython's sys.argv
 -h,--help                      print this help message
 -r,--run <sikuli-file>         run .sikuli or .skl file
 -s,--stderr                    print runtime errors to stderr instead of popping up a message box
 -t,--test <sikuli-file>   run .sikuli as a unit test case with junit's text UI runner
-r,--run <sikuli-file>
run .sikuli or .skl file
-s,--stderr
print runtime errors to stderr instead of popping up a message box
-t,--test <sikuli-file>
run a .sikuli (.skl not possible) as a unit test with junit’s text UI runner (A script that can also be run in IDE’s Unit Test View).

Example - Run xxxx.sikuli with three arguments:

Windows
PATH-TO-SIKULIsikuli-ide.exe -r xxxx.sikuli —args a1 a2 a3

Linux
PATH-TO-SIKULI/sikuli-ide.sh -r xxxx.sikuli —args a1 a2 a3

Mac OS X
/Applications/Sikuli-IDE.app/sikuli-ide.sh -r xxxx.sikuli —args a1 a2 a3

Mac: using open to run a script

On Mac there is an alternative way to run a .skl file using open.

Mac OS X
open /Applications/Sikuli-IDE.app —args ABSOLUTE-PATH-TO-A-SKL
With “open -g”, you even can run a sikuli script without bringing Sikuli-IDE to the foreground. So the focus remains on the current window when executing a sikuli script.

Mac OS X
open -g /Applications/Sikuli-IDE.app —args ABSOLUTE-PATH-TO-A-SKL

Running sikuli-script.jar from Command line

New in version X1.0-rc2.
Interested in the Option -i (interactive Sikuli)?
If you follow these standards, you can do the following out of the box:
  • Windows: install Sikuli X using the installer (the system %PATH% will be set as needed)
    There is a new environment variable %SIKULI_HOME% that is expected to contain the directory, where Sikuli X is installed. You have to set it, if you have Sikuli X in a different place.
    Be aware: using the zipped version, you have to take care for %PATH% and %SIKULI_HOME% yourself.
  • Mac: have Sikuli-IDE.app in its standard place /Applications. There is generally no need to put it elsewhere.
  • Linux: you generally have to take care for the environment yourself.
You might want to add more java options. They are left out here to concentrate on the point.
NOTE: In the commands below, some environment variables are only defined, to keep the lines short. The term path-to-your-script has to be specified according to your situation.
On Linux it should be principally like on Mac, with your specific adjustments.
Run a script without IDE

Windows
java -jar %SIKULI_HOME%\sikuli-script.jar path-to-your-script\yourScript.sikuli

Mac OS X
SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java
java -jar $SIKULI_HOME/sikuli-script.jar path-to-your-script/yourScript.sikuli
Run a script from Command line using the Sikuli contained Jython

This option might be helpful in some cases, where you want to have access to the Jython layer, before any Sikuli feature is touched. Be aware, that a from sikuli.Sikuli import * is needed to have access to Sikuli. You might have to take care somehow, that images are found, since bundle path is not set.

Windows
set SCRIPT=path-to-your-script\yourScript.sikuli\yourScript.py
java -cp %SIKULI_HOME%\sikuli-script.jar org.python.util.jython %SCRIPT%

Mac OS X
SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java
java -cp $SIKULI_HOME/sikuli-script.jar org.python.util.jython path-to-your-script/yourScript.sikuli/yourScript.py

Interactive Sikuli Jython Session from Command Line (Option -i)

sikuli-script.jar
-i
Start an interactive Jython session with the Sikuli environment already in place.
This might be helpful to do some testing on commandline, without having to start the Sikuli IDE. A specified script and other options will be ignored.

Windows
java -jar %SIKULI_HOME%\sikuli-script.jar -i

Mac OS X
SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java
java -jar $SIKULI_HOME/sikuli-script.jar -i

This is a Mac sample session:
....$ java -jar /Applications/Sikuli-IDE.app/Contents/Resources/Java/sikuli-script.jar -i
[info] Sikuli vision engine loaded.
[info] Mac OS X utilities loaded.
[info] VDictProxy loaded.
>>> Settings.ActionLogs=False
>>> Settings.InfoLogs=False
>>> Settings.DebugLogs=False
>>> img = capture()
>>> click(img)
1
>>> ret = click(img)
>>> Settings.ActionLogs=True
>>> click(img)
[log] CLICK on (1834,432)
1
>>> exit()

Sabtu, 23 Februari 2013

FAQ Sikuli : Can I do X or Y or Z in Sikuli?

If you are wondering if Sikuli can do X or Y, there are few rules that may answer you.
  • If you can do X with Java, you can also do it in Sikuli. For example, you can create a GUI with Java Swing, so you can do it in the same way in Sikuli.
  • If you can do X with Python, you probably can do it in Sikuli as well. This actually depends on what Python modules you use. If the modules are written in pure Python, you can use them in Sikuli. If they are written in C, unfortunately, you can’t.

Can I write a loop in Sikuli?

Yes. Sikuli is based on Jython. You can use all constructs that are available in Jython. See Jython’s While loop and For loop.

Can I create a GUI in Sikuli?

Yes, you can create GUIs with Java Swing or any other Java/Jython GUI toolkits. See Jython’s Swing examples for examples.

Can I connect to MySQL/MS SQL/PostgreSQL or any database systems in Sikuli?

You can use JDBC or zxJDBC.

Can I read/write files in Sikuli?

Yes. See Jython’s File I/O.

Kamis, 21 Februari 2013

Mengubah Ukuran Window

Tutorial ini menunjukkan bagaimana menggunakan script Sikuli untuk mengubah ukuran jendela dengan menyeret pojok kanan bawah nya. Untuk melakukannya, Anda harus mengevaluasi posisi saat ini sudut layar, pindahkan pointer mouse ke titik mana klik akan diberlakukan dan kemudian melakukan satu atau lebih tindakan drag.
 
  def resizeApp(app, dx, dy):
  switchApp (app)
  corner = find(pattern(). TargetOffset(3, 14))
 
  drop_point = corner.getTarget().offset (dx, dy).
  dragDrop(corner, drop_point)
 
  resizeApp("Safari", 50, 50) 
 
Contoh ini mendefinisikan fungsi "resizeApp" untuk memperbesar jendela pada Mac, dan kemudian memanggil fungsi untuk memperbesar ukuran window Safari sebesar 50x50 piksel. Ada beberapa pendekatan untuk melakukan tugas ini. Yang paling sederhana adalah langsung mencari sudut dan tarik untuk memperbesar jendela.
 
Selain pendekatan ini sederhana, kami juga ingin menunjukkan kepada Anda cara yang lebih mungkin untuk melakukan hal yang sama. Contoh berikut menunjukkan bagaimana menggunakan spatial operator untuk memperpanjang atau membatasi wilayah pencarian Anda.
 
Pendekatan untuk menemukan sudut ini adalah untuk pertama mengidentifikasi sudut paling karakteristik dari window (sebagian besar dengan menggunakan tombol di window) dan kemudian mencoba untuk menemukan sudut lain yang relevan, untuk memastikan Anda mendapatkan titik klik yang Anda butuhkan. Strategi ini digambarkan di bawah ini. Kami ingin mencari sudut atas yang tepat, kemudian pergi ke kanan untuk menemukan sudut kanan atas, kemudian pergi ke bawah untuk menemukan sudut kanan bawah.
 
. /... / _images / Safari_spatial.png
Script yang mengimplementasikan rencana ini dapat ditulis sebagai berikut:
 
  # setShowActions(True) # men-debug
  switchApp("Safari") # mendapatkan jendela aktif frontmost Safari 
 
  clickOffsetX, clickOffsetY) = (3, 18) # dievaluasi dengan menggunakan pratinjau di IDE
  MTL = find() # Find kiri atas
  # cetak MTL, hover (MTL) # debug
 
  mtr = mTL.nearby(200).right().find() # Find kanan atas
 
  # cetak MTR, hover (MTR) # debug
  MBR = mTR.below ().find() # Find kanan bawah, pojok sasaran
  # cetak MBR # men-debug
 
  # gerakkan mouse untuk mengklik titik
  hover (mBR.getCenter().Offset(clickOffsetX, clickOffsetY))
  # exit () # men-debug
 
  mouseDown(Button.LEFT) # tekan dan tahan tombol kiri
  # menggerakkan mouse ke lokasi yang baru, dapat diulang dengan nilai-nilai lain
  mouseMove(Env.getMouseLocation().Offset(10, 10))
  mouseUp () # rilis tombol mouse
  
Alur kerja dan perpindahan mouse ke titik klik dapat dikompresi dalam satu baris (tidak ada pemeriksaan pada judul dalam kasus ini).
 
  hover(find()nearby(200).right().find()below().find().GetCenter().Offset(3, 18))

Secara umum:
  • sebisa mungkin menemukan operasi dibatasi dalam suatu region, harus berisi  match yang relevan, untuk meminimalkan risiko, bahwa sesuatu yang sama, yang lain, ditemukan. Di atas kondisi ini kecepatan script ini dicapai.
  • contoh ini dengan mudah bisa berubah menjadi fungsi pembantu, di mana semua gambar dan variabel dapat diberikan sebagai parameter.
  • titik klik dievaluasi dalam IDE menggunakan jendela pratinjau, tapi kemudian dimasukkan ke dalam kode untuk fleksibilitas dan mudah dibaca.
  • fungsi tingkat rendah mouse yang digunakan, sehingga Anda akan lebih fleksibel dengan gerakan berkelanjutan.
  • pendekatan pengembangan Sikuli, terlebih dahulu mendapatkan segalanya berjalan untuk mengevaluasi sudut yang relevan. Dalam fase ini, komentar memiliki "# debug". Semua tanda komentar akan memiliki umpan balik. Terutama setShowActions() dan exit() sangat membantu.

Rabu, 20 Februari 2013

Desktop Surveillance

Sikuli Script dapat digunakan untuk melakukan Desktop Surveillance / Pengawasan Desktop / Scanning Terhadap Desktop. Dalam tutorial ini, kita akan pergi melakukan sejumlah latihan untuk membuat script yang dapat memantau layar dan memberitahu kita ketika event visual tertentu yang menarik terjadi.

Facebook App

Latihan pertama adalah untuk membuat aplikasi Facebook yang secara berkala memeriksa homepage Facebook kami secara visual dan melihat apakah seorang teman tertentu baru-baru ini memperbarui pesan status. Salah satu cara mudah untuk mendeteksi acara ini adalah untuk mencari gambar wajah teman di homepage Facebook kami. Jika ditemukan, artinya teman telah posting pesan status baru. Jika tidak ditemukan, kita harus memeriksa kembali lagi dalam beberapa saat.
Mari kita menerapkan operasi ini menggunakan while: loop.
Pertama kita perlu untuk menangkap screenshot dari gambar wajah teman.
 
. /... / _images / Facebook_capture.png

Untuk memeriksa apakah wajah teman bisa dilihat di layar, kita gunakan exists() , yang mengembalikan True ketika gambar wajah ditemukan. Kami mengatur kondisi looping untuk Tidak Ditemukan sehingga loop sementara akan berakhir hanya ketika gambar wajah ditemukan. Kami menambahkan sleep(n)pernyataan (statement) dalam tubuh loop untuk memrintahkan berhenti sejenak selama 5 detik diantara upaya untuk mencari gambar wajah di layar.
 
  while not exist():
  sleep (5) 
 
Atau, Sikuli juga menyediakan fungsi yang mendukung  wait() bila mau digunakan, fungsi yang secara berkala memeriksa layar untuk menunggu pola gambar yang diberikan untuk tampil. Menggunakan kode wait(), di atas dapat ditulis sebagai:
 
  wait(,FOREVER) 
 
Konstanta FOREVER berarti kita ingin Sikuli menunggu tanpa batas waktu. Jika kita tidak ingin menunggu selamanya, kita dapat mengganti FOREVER dengan angka, untuk menunjukkan jumlah detik untuk menunggu sampai Sikuli harus bangkit untuk melanjutkan perintah selanjutnya.
 
  wait(,3600) # menunggu selama satu jam 
 
Setelah keluar dari while: loop atau kembalian dari fungsi wait, kita dapat memanggil popup() untuk menampilkan pesan pemberitahuan.
 
  popup ("Obama telah memperbarui pesannya") 
 
Ini akan menampilkan pesan pop-up yang terlihat seperti di bawah ini:
 
. /... / _images / Facebook_popupmsg.png

Sekarang kita bisa menjalankan Sikuli Facebook App, duduk bersantai, dan dapatkan pemberitahuan saat teman kita update pesannya.

Skype App

Pada latihan sebelumnya, kami menulis script untuk mendeteksi tampilan gambar ini. Dalam latihan ini, kita akan melakukan hal yang sebaliknya - mendeteksi hilangnya pola visual.
 
Skype adalah alat yang hebat yang memungkinkan kita untuk tetap berhubungan dekat dengan teman-teman kita bahkan jika mereka berada di bagian terpencil dunia. Namun, mungkin ada beberapa keadaan yang tidak menguntungkan sehingga kita mungkin ingin menghindari terlihat online oleh individu tertentu. Mungkin individu berbicara terlalu banyak. Mungkin kita berutang uang dengan individu tersebut ... hehehe. Ini akan menyenangkan bagi kita bila kita bisa tahu ketika sesorang tersebut sedang offline, sehingga aman bagi kita untuk online. Sementara Skype tidak menyediakan fitur untuk memberitahu kami ketika seseorang sedang online, pun tidak ada fitur pemberitahuan bila hal sebaliknya terjadi.
 
Sebuah logoff notifier otomatis, akan sangat diinginkan untuk menangani situasi ini. Mari kita membangun alat ini menggunakan Script Sikuli. Perhatikan bahwa jika seorang individu tidak lagi online, pola visual yang gabungan ikon status hijau dan nama layar individu akan hilang. Dengan demikian, kita bisa mengambil screenshot yang meliputi ikon hijau dan nama layar sebagai berikut.
 
. /... / _images / Skype_capture.png

Kemudian, kita dapat menulis Script Sikuli untuk memantau hilangnya gambar screenshot yang kita tangkap sebelumnya 
  while exist():
  sleep (5)
  Popup  ("vgod sedang log off") 
 
Script ini sangat mirip dengan yang dalam latihan sebelumnya. Satu-satunya perbedaan adalah penghapusan operator "not" dari pernyataan kondisi while loop, karena kita berusaha untuk melakukan yang sebaliknya.
 
Cara lain untuk menunggu hilangnya gambar adalah dengan menggunakan fungsi waitVanish(). Script di atas dapat ditulis sebagai berikut:
 
  waitVanish(,FOREFER)
  Popup("vgod sedang log off")

Bus Kedatangan Notifier

Latihan ketiga adalah untuk membangun sebuah alat pemberitahuan kedatangan bus. Bagi banyak penumpang bus, layanan pelacakan online berbasis GPS sangat berguna. Daripada harus sabar berdiri di halte bus, menantang angin dingin di musim dingin atau terik matahari di musim panas, calon penumpang bus dapat duduk dengan nyaman di dalam di depan komputer mereka, memeriksa email, memperbarui status Facebook, atau menonton YouTube? video, atau apa pun. Mereka hanya perlu melihat peta setiap beberapa saat untuk memeriksa lokasi simbol bus di peta. Hanya ketika posisi bus sudah cukup dekat, mereka akhirnya harus keluar dan berjalan ke bus.
 
Karena kita peduli apakah bus semakin dekat untuk berhenti, kita hanya perlu melihat lingkungan sekitar posisi bus berhenti. Dengan demikian, kita dapat mengubah ukuran browser seperlunya saja untuk yang menunjukkan sebagian peta sekitar saja, sementara dilain pihak kita memiliki banyak ruang layar untuk melakukan sesuatu yang lain, dalam hal ini, membaca berita CNN atau lainnya :).
 
. /... / _images / Bus_fullscreen.png

Mari kita menulis Script Sikuli untuk melakukan pelacakan posisi bus bagi kita. Hal ini dimungkinkan untuk mendefinisikan suatu "region" (daerah di layar) dan meminta Script Sikuli untuk fokus hanya pada daerah itu untuk mencari pola visual tertentu. Dengan cara ini, Sikuli tidak perlu membuang siklus komputasi berharga pemindaian seluruh layar. Untuk melakukannya, mari kita klik pada tombol "select a region" di toolbar seperti yang ditunjukkan di bawah ini.
 
. /... / _images / Bus_toolbar_region.png

Seluruh layar akan membeku dan berubah gelap, mirip dengan apa yang terjadi dalam modus screen capture. Cukup menggambar persegi panjang untuk menutupi peta seluruh lingkungan. Wilayah yang tercakup oleh persegi panjang ini secara visual direpresentasikan sebagai gambar thumbnail dari seluruh desktop di mana wilayah adalah daerah berbayang / berwarna merah.
 
. /... / _images / Bus_region_thumbnail.png

Selanjutnya, kita menangkap gambar screenshot dari simbol bus sehingga kita dapat memberitahu Script Sikuli untuk memantai tampilan tersebut.
 
. /... / _images / Bus_capture_bus_symbol.png

Sekarang. kita dapat menulis script berikut untuk memeriksa peta dan memantau munculnya simbol bus:

  while not .inside().exist():
  sleep(5)
  popup("bus telah tiba") 
 
Tafsirkan makna dari while loop secara langsung adalah
Sementara tidak simbol bus dapat ditemukan di dalam kawasan, tidur selama 5 detik. Dengan kata lain, loop sementara akan keluar hanya ketika simbol bus ditemukan di dalam wilayah tersebut. Kemudian, pernyataan popup akan dieksekusi untuk memberitahu kami bus telah tiba.
 
Sekali lagi, efek yang sama bisa kita dapatkan dengan menggunakan wait() . Script dapat ditulis kembali sebagai:
 
  .inside().wait(, FOREFER)
 Popup("bus telah tiba") 
 
OK selamat mencoba ... selamat mengeksplorasi kemampuan Sikuli :)

Selasa, 19 Februari 2013

Bekerja Dengan Sliders

Dalam tutorial ini, kita akan belajar bagaimana menggunakan dragDrop () dan operator spasial dengan menulis sejumlah script untuk memanipulasi slider.
 
Misalkan kita ingin menurunkan tingkat berbicara dari fungsi Text to Speech. Kami ingin menyeret slider ke sisi lambat di jendela Preferensi Speech seperti ditunjukkan di bawah ini.
 
. /... / _images / Speech.png



Fungsi yang dapat melakukan menyeret tombol adalah dragDrop () . Fungsi ini membutuhkan dua gambar sebagai argumen. Gambar pertama menggambarkan obyek sumber GUI untuk menyeret dan gambar kedua menggambarkan penampilan lokasi tujuan ke mana obyek GUI harus diseret / didrag dan menjatuhkan / didrop.

Mari kita menangkap masing-masing gambar sumber dan tujuan.
 
  dragDrop (   ,   ) 
 
Apa yang terjadi jika ada lebih dari dua slider. Bagaimana bisa kami pastikan slider yang tepat diseret? Contoh di atas bekerja karena jendela tertentu hanya memiliki satu slider. Bagaimana kita bisa menangani contoh kasus-kasus ketika ada beberapa komponen GUI yang serupa yang harus dicari? Mari kita perhatikan jendela preferensi suara seperti ditunjukkan di bawah ini.
 
. /... / _images / Sound.png



Misalkan kita ingin menurunkan volume Alert. Untuk memastikan Script Sikuli menyeret slider yang tepat, kita membutuhkan suatu cara untuk memberitahu Script Sikuli untuk mencari salah satu yang di sebelah kanan volume label Alert, bukan yang di samping label "Output Volume". Sikuli Script menyediakan satu set operator spasial untuk melakukan hal ini. Di sini kita akan menerapkan operator right () sebagai berikut.
 

  t = find().right().find() 
 
Pernyataan ini memberitahu Script Sikuli untuk pertama menemukan volume label Alert dan kemudian menemukan tombol slider hanya dalam wilayah telah ketat ditetapkan di sebelah kanan hasil pertama yang telah ditemukan. Tombol slider ditemukan kemudian disimpan dalam variabel t. Sekarang kita telah mengidentifikasi tombol slider yang diinginkan, kita dapat memanggil dragDrop () untuk menyeret ke kiri dengan memberikan citra / gambar "Alert Volume" sebagai target.
 
  dragDrop (t,) 
 
Dalam contoh di atas, kita menggunakan gambar dari label "Alert Volume" untuk secara implisit memandu arah menyeret ke kiri. Hal ini juga dimungkinkan untuk menggunakan koordinat relatif terhadap eksplisit tarik ke kiri, seperti yang ditunjukkan di bawah ini.
 
  dragDrop(t,[tx-200,ty]) 
 
Di sini, (x,y) koordinat jempol slider dapat diakses sebagai atribut dari t. Dengan demikian kita dapat menghitung posisi 200 pixel di sebelah kiri t dan meminta Script Sikuli untuk menyeret jempol sepanjang  posisi itu.

OK ... selamat mencoba dan mengeksplorasi Sikuli. :) 

Senin, 18 Februari 2013

Memeriksa Dan Mencari Checkbox Yang Benar

Tutorial ini menunjukkan bagaimana cara untuk memeriksa kotak centang tertentu ketika ada beberapa kotak centang dalam satu jendela. Pertimbangkan jendela berikut, yang merupakan jendela untuk menetapkan preferensi untuk Dock di Mac, dan kami ingin memeriksa kotak centang yang ditunjukkan oleh lingkaran yang bertuliskan "Minimize windows to application icon."


. /... / _images / Scenario.png

Cukup mencari citra/gambar kotak centang seperti di bawah ini tidak akan bekerja.
  click (   )

Sikuli tidak tahu mana checkbox yang kita acu / menjadi acuan kita. Dia hanya mengklik pada gambar pertama yang ditemukan. Di bawah ini adalah apa yang akan kita lakukan sebagai gantinya.
 
Pertama kita ingin mendapatkan wilayah yang meliputi daerah isi panel Dock. Salah satu cara untuk mencapai hal ini adalah dengan menggunakan operator spasial untuk mendapatkan daerah di bawah judul bar dari jendela Dock. Gambar di bawah ini menggambarkan strategi ini.
 
. /... / _images / Find_title_and_below.png

Script Sikuli untuk melakukan ini adalah:
 
1.  r = find ()below(300.)
 
Ia menemukan judul bar dan kemudian memperluas wilayah cocok 300 piksel di bawah ini, menggunakan operator spasial below . Wilayah yang dihasilkan diberikan ke variabel r, yang merupakan persegi panjang orange pada gambar di atas.
 
Selanjutnya, kita dapat mencari di dalam r wilayah konten untuk teks label kotak centang yang ingin kita periksa dan klik di atasnya.
 
  t = r.find (. )
  click (t) 
 
Jika kita melakukan click (t), Sikuli akan klik pada tengah label. Namun, yang kita inginkan sebenarnya adalah mengklik kotak cek di sebelah label yang benar.
 
Sikuli IDE menyediakan antarmuka yang mudah untuk menentukan di mana untuk mengklik relatif terhadap pusat pola. Hal ini dikenal sebagai target offset. Antarmuka ditampilkan di bawah.
 
. /... / _images / Interface_offset.png

Pada antarmuka ini, kita dapat mengklik kotak centang untuk menunjukkan lokasi yang diinginkan dari titik klik. Dalam contoh ini, offset ini kemudian ditetapkan menjadi -137 di x, yang berarti 137 pixel di sebelah kiri tengah label teks. Setelah memilih offset, thumbnail dalam editor skrip akan diperbarui dengan silang merah kecil untuk menunjukkan titik klik baru.
 
  t = r find (.)
  click (t)

Kemudian, memanggil click (t) yang akan melakukan hal yang benar, klik pada kotak centang bukan pusat label teks.

Minggu, 17 Februari 2013

Hapus Tanda Centang Semua Checkbox

Dalam tutorial ini, kami akan menunjukkan bagaimana menggunakan untuk loop untuk berinteraksi dengan beberapa contoh dari komponen GUI. Misalkan kita ingin hapus centang semua kotak cek di jendela, seperti jendela Sharing preferensi ditunjukkan di bawah ini:


. /... / _images / Uncheck_sharing.png

Sayangnya, tidak ada fungsi "hapus centang semua" yang tersedia. Solusinya? Menulis Script Sikuli untuk mencari SEMUA item yang diperiksa dan hapus centang secara otomatis. Fungsi yang diperlukan untuk operasi ini adalah findAll () .
Pertama, mari kita menangkap gambar screenshot dari item diperiksa.
 
. /... / _images / Uncheck_capturing.png

Kemudian, kita dapat menyisipkan gambar ke dalam fungsi findAll ().
 
. /... / _images / Uncheck_findall.png

findAll () mencari seluruh layar untuk semua pola visual pencocokan dan mengembalikan daftar lokasi dari pola-pola yang sama. Kemampuan ini memungkinkan kita untuk mendapatkan ada pada layar semua item yang diperiksa. Kemudian, kita hanya bisa menulis untuk loop dalam sintaks Python standar dan memanggil click() pada setiap elemen dalam daftar.
 
. /... / _images / Uncheck_code.png  

Ketika script ini dijalankan, Sikuli akan menemukan semua item yang sedang diperiksa dan klik pada setiap item satu per satu di loop.