BotreamDokümanlar Web sitesi English v0.1.1

Masaüstü otomasyonu

Botream, Windows programlarını Windows UI Automation aracılığıyla otomatikleştirir: bir pencereyi bir pencere değişkeniyle adlandırır, düğmeleri, alanları, listeleri ve menüleriyle de desktop komutu üzerinden çalışırsınız.

Pencere değişkenleri

Her masaüstü komutu --window:$name$ olarak verilen bir pencere üzerinde çalışır. Bir pencere değişkeni elde etmenin üç yolu vardır:

Nasıl Ne tutar
set --name:erp --type:window --path:"erp.exe" --title:"*Invoice*" Bir desen: her komut eşleşen ilk açık pencereyi kullanır.
window --action:open --path:"notepad.exe" --output:editor Programı başlatır ve onun penceresini bağlar.
window --action:attach --title:"*Invoice*" --path:"erp.exe" --output:erp Zaten açık olan bir pencereyi bağlar.

Joker karakterler

Başlık ve yol, * joker karakterlerini kabul eder:

  • Başlık: *Notepad*, * - Google Chrome, Report*
  • Yol: erp.exe, C:\Program Files\*\EXCEL.EXE

Mümkün olduğunda tam yol yerine program adını kullanın: böylece görev, programın başka bir klasöre kurulu olduğu makinelerde de çalışır. Mağaza uygulamalarının program yolu yoktur; bunları başlıklarıyla tanımlayın.

Desenler ve tanıtıcılar (handle)

window --action:open veya window --action:attach ile oluşturulan bir değişken, belirli tek bir pencereyi (tanıtıcısını) sabitler. Bu, aynı programın iki penceresini, örneğin aynı düzenleyicinin iki belgesini birbirinden ayırt eder. Böyle bir değişkeni penceresi kapandıktan sonra kullanmak "has been closed" hatasıyla başarısız olur. set --type:window değişkeni ise bir desen olarak kalır ve eşleşen hangi pencere açıksa onu bulur.

window --action:open --path:"notepad.exe" --output:editor
desktop --action:settext --window:$editor$ --by:classname --target:"Edit" --value:"Hello"
window --action:close --window:$editor$

window --action:open, pencereyi --timeout süresine kadar bekler; başka bir programı açan başlatıcılar için beklenecek pencerenin --title değerini verin.

Düzenleyicide pencere değişkeni oluşturma

  • Bir Window alanının yanındaki New, ajan makinesinde açık olan pencerelerden birinden bir pencere değişkeni oluşturur.
  • Bir Title alanının yanındaki Choose, açık pencereleri listeler ve Title ile Path alanlarını doldurur (yol, program adına indirgenir).
  • Bir element yakaladığınızda komutun henüz bir penceresi yoksa düzenleyici o programa ait bir pencere değişkenini yeniden kullanır veya görevin en üstünde yeni bir değişken ($window1$, $window2$…) tanımlar.

Pencere eylemleri

window pencerenin kendisini de yönetir: activate, close, maximize, minimize, restore, resize (--width --height), move (--x --y), exists, wait, getproperty ve list.

window --action:wait --window:$erp$ --timeout:30
window --action:maximize --window:$erp$
window --action:getproperty --window:$erp$ --property:Title --output:erpTitle

getproperty; Title, Path, ProcessId, X, Y, Width, Height, IsMinimized, IsMaximized veya Handle değerlerini okur.

desktop komutu

desktop, penceredeki bir elementi --by ve --target ile bulur ve üzerinde işlem yapar:

desktop --action:click --window:$erp$ --by:automationid --target:"btnSave"
desktop --action:settext --window:$erp$ --by:name --target:"Customer" --value:$customer$
desktop --action:getproperty --window:$erp$ --by:automationid --target:"statusBar" --property:value --output:statusText
desktop --action:exists --window:$erp$ --by:name --target:"Save" --output:saveExists
Grup Eylemler
Fare click, doubleclick, rightclick, hover
Giriş settext (metni değiştirir), clear, select, check, uncheck, focus, expandcollapse
Okuma getproperty, exists, getchildren
Yazma setproperty (yalnızca value, yani bir metin kutusunun metni)
Bekleme ve kaydırma waitfor, scrollto

getproperty; value, name, automationid, classname, controltype, isenabled, isoffscreen, ischecked veya helptext değerlerini okur. Element eylemleri --timeout süresine kadar (varsayılan 30 saniye) bekler ve --retry ile --retryinterval kullanılarak tekrarlanabilir.

Bulma stratejileri

--by Kullandığı Güvenilirlik
automationid Elementin AutomationId değeri Program bir değer atıyorsa en güvenilir yöntem
name Elementin Name değeri (genellikle etiketi) Metin değişmedikçe veya çevrilmedikçe iyi
classname Elementin sınıf adı Çoğu zaman birçok element tarafından paylaşılır
xpath Pencerenin element ağacında bir yol Esnek; yakalamalar sizin için oluşturur
index Konum Kırılgan, son çare

Masaüstü elementlerini yakalama

Bir desktop komutu seçin ve Target yanındaki Capture düğmesine tıklayın. Capture desktop element iletişim kutusu, uygulamaya geçip elemente tıklamanızı ister.

  • Komutun zaten bir Window değeri varsa o pencere öne getirilir.
  • Tıklamaları geçiren bir katman, fare altındaki elementi vurgular.
  • Elementi seçen tıklama uygulamaya iletilmez; bu nedenle programda hiçbir şey olmaz.
  • Sağ tıklama işlemi iptal eder. Esc önce Yakalama iptal edilsin mi? diye sorar: Enter iptal eder, yeniden Esc yakalamaya devam eder.

Yakalama işlemi By ve Target alanlarını önerilen seçiciyle (benzersiz bir AutomationId, ardından Name, ardından sınıf adı, aksi takdirde pencereden başlayan bir XPath), Object properties tablosunu ve elementin kırmızı bir çerçeveyle işaretlendiği bir pencere ekran görüntüsünü doldurur.

Not: Masaüstü element yakalama, üzerinde çalıştığınız bilgisayarda Botream Agent tepsi uygulamasının çalışmasını gerektirir.

UI teknolojisi

Windows, bir programın elementlerini UI Automation ile, iki sürümde gösterir. Sürümü yakalamadan önce Capture düğmesinin yanından seçin: seçici çalışmaya başladığında her tıklama bir element seçer.

Teknoloji Ne için kullanılır
Otomatik (varsayılan) Çoğu program. Elementler UI Automation 3 ile okunur; bir elementin orada ne AutomationId'si ne de adı varsa UI Automation 2'ye de bakılır ve daha fazlasını gösteriyorsa onun elementi kullanılır.
UI Automation 3 Modern uygulamalar: WPF, UWP, Windows 10/11 uygulamaları ve çoğu Win32 programı.
UI Automation 2 Düğmelerini, tablolarını veya menülerini UI Automation 3'ün iyi göstermediği eski Win32 ve WinForms programları.

Seçim komutla birlikte kaydedilir (--technology:uia2) ve görev çalışırken element aynı teknolojiyle bulunur; Otomatik ile önce UI Automation 3, sonra 2. Otomatik yakalama sırasında bir elementi UI Automation 2'den aldıysa, yolu yalnızca orada var olduğundan komut UI Automation 2 olarak kalır. Çapalar ve yedek seçiciler komutun teknolojisini kullanır. Object properties, teknolojiyi nesne türünün yanında gösterir.

Not: UI Automation 2 güncel Botream Agent'ı gerektirir. Eski bir agent bunu seçen bir görevi, agent'ı güncelleme mesajıyla reddeder.

Masaüstü elementlerinin nesne özellikleri

Özellik Neyi karşılaştırır
Control type Button, Edit, CheckBox…
Automation ID Programın elemente verdiği AutomationId.
Name Elementin adı; genellikle etiketi veya metni.
Class name Elementin pencere sınıfı.
Help text Elementin yardım metni.
Index Diğer işaretli özelliklerle birden çok element eşleştiğinde hangisinin kullanılacağı (1 = penceredeki ilk element).

Web elementlerinde olduğu gibi, işaretli her özellik elementinkine eşit olmalıdır, * bir joker karakterdir (Save*), $variables$ kullanılabilir ve Target her değişiklikte tablodan yeniden oluşturulur: tek bir tam AutomationId, Name veya sınıf adı doğrudan kullanılır, diğer her durum //Button[starts-with(@Name, "Save")] gibi bir XPath'e dönüşür. Target alanını elle düzenlemek onu tablodan ayırır; Use properties yeniden oluşturur. Çapalar, yedek seçiciler ve self-healing (kendi kendini onarma) için bkz. Elementleri güvenilir şekilde bulma.

Tuş gönderme

sendkeys, bir pencereye metin ve özel tuşlar yazar:

sendkeys --window:$erp$ --keys:"$orderNo$[TAB]$amount$[ENTER]"
sendkeys --window:$erp$ --keys:"[CTRL+S]" --interval:50
  • Özel tuşlar köşeli parantez içinde yazılır: [ENTER], [TAB], [ESC], [F5], [CTRL+C], [ALT+F4]. Değişmez bir [ için [[ kullanın. Keys to send yanındaki Insert key yaygın olanları listeler.
  • --activate (varsayılan true) önce pencereyi öne getirir.
  • --interval, hızlı yazmayı kaçıran programlar için tuş vuruşları arasında milisaniye cinsinden bekler.

Fare

mouse, elementleri yakalanamayan programlar (uzak masaüstleri, çizimler, tuval görünümleri) için piksel konumlarında tıklar, sürükle-bırak yapar ve kaydırır:

mouse --action:click --window:$erp$ --x:120 --y:80
mouse --action:drag --window:$erp$ --x:100 --y:200 --tox:400 --toy:200
mouse --action:scroll --window:$erp$ --amount:-3 --x:300 --y:250
mouse --action:getposition --output:pos
  • Eylemler: click, doubleclick, rightclick, middleclick, move, drag, scroll, getposition.
  • --window ile konumlar pencerenin sol üst köşesinden itibaren sayılır ve pencere öne getirilir. Olmadan, ekranın köşesinden itibaren sayılır.
  • Konum belirtilmeyen tıklamalar ve scroll, işaretçinin bulunduğu yerde gerçekleşir.
  • scroll --amount tekerlek adımı cinsindendir: pozitif yukarı, negatif aşağı.
  • X yanındaki Pick, her iki koordinatı doldurmak için ajanın ekranındaki noktaya tıklamanızı sağlar.

Uyarı: Piksel konumları düzen değiştiğinde bozulur. İşe yaradığı her yerde yakalanmış bir elementle desktop komutunu tercih edin.

Ekran görüntüleri

screenshot, tüm ekranın (tüm monitörler), bir pencerenin veya bunlardan birinin bir alanının resmini kaydeder:

screenshot --file:"C:\Shots\error-$orderNo$.png"
screenshot --file:"C:\Shots\erp.jpg" --window:$erp$ --x:0 --y:40 --width:800 --height:500 --output:saved

Dosya uzantısı biçimi belirler: .png, .jpg veya .bmp. Pencere önce öne getirilir. Bir web sayfası için bunun yerine browser --action:screenshot kullanın (görünmez modda da tüm sayfa).

OCR ile metin okuma

ocr, elementleri yakalanamayan uygulamalar (terminal öykünücüleri, Citrix veya uzak masaüstü oturumları, taranmış belgeler) için Windows'un yerleşik OCR özelliğiyle metin okur:

ocr --action:read --window:$terminal$ --x:0 --y:60 --width:900 --height:400 --language:en --output:screenText
ocr --action:find --window:$erp$ --text:"Total" --output:pos
if --condition:"$pos.Found$ = true"
    mouse --action:click --window:$erp$ --x:$pos.CenterX$ --y:$pos.CenterY$
endif
ocr --action:read --file:"C:\Scans\invoice.png" --output:scanText
Eylem Sonuç
read Satırları satır sonlarıyla ayrılmış tüm metin.
readlines Kayıtlardan oluşan bir liste: Text, X, Y, Width, Height, CenterX, CenterY.
find --text Metni içeren ilk satır (büyük/küçük harf fark etmez); Found alanı da içeren böyle bir kayıt olarak.
languages Ajan makinesinde kurulu OCR dilleri.
  • Kaynak; --window, pencerenin veya ekranın bir alanı (--x --y --width --height) ya da bir resim dosyasıdır: --file (.png, .jpg, .bmp, .tif). Pencere öne getirilmez.
  • Konumlar --x/--y gibi sayılır; böylece bunlara mouse ile tıklayabilirsiniz.
  • --language, en, de veya tr gibi bir dil etiketi alır; boş bırakılırsa Windows görüntüleme dilleri kullanılır. Windows'ta Settings → Time & language → Language altında ("Optical character recognition" özelliği) daha fazla dil yükleyin.

Ekranda resim bulma

image ekranda bir resmi — bir düğmeyi, bir simgeyi, bir logoyu — bulur ve ona tıklar ya da nerede olduğunu söyler. Başka hiçbir şeyin çalışmadığı yerlerde çalışır: Citrix ve uzak masaüstü oturumları, canvas ve oyun benzeri uygulamalar, piksel olarak çizilen her şey.

image --action:click --image:4f1d2c3b-… --window:$citrix$
image --action:find --image:"C:\Pictures\approve.png" --similarity:85 --output:pos
if --condition:"$pos.Found$ = true"
    mouse --action:click --window:$citrix$ --x:$pos.CenterX$ --y:$pos.Y$
endif
image --action:waitvanish --image:4f1d2c3b-… --timeout:60
  • Resim: özellikler panelinde Image yanındaki Capture ajanın ekranını karartır; bulunacak şeyin çevresine sıkıca bir dikdörtgen çizin. Resim görevle birlikte saklanır (alan kimliğini tutar) ve alanın altında gösterilir; çalıştırmalar onu yanlarında götürür. Ajan makinesindeki bir .png, .jpg veya .bmp dosyası da kullanılabilir.
  • Nerede: --window aramayı o pencereyle sınırlar (ve pencereyi öne getirir); olmadan tüm ekran aranır. Konumlar, mouse ve ocr gibi pencerenin (veya ekranın) sol üst köşesinden sayılır.
  • Benzerlik (--similarity, 50–100, varsayılan 90): bir noktanın ne kadar benzer olması gerektiği. Parlaklık ve kontrast değişiklikleri tolere edilir; biraz değişen resimler için (kenar yumuşatma, biraz farklı bir renk) düşürün, bunun yerine benzerleri bulunuyorsa yükseltin.
  • Bekleme: komutlar resmin görünmesi için en fazla --timeout saniye (varsayılan 10) bekler; exists siz zaman aşımı vermedikçe beklemez.
Eylem Ne yapar
click, doubleclick, rightclick, hover --offsetx/--offsety ile kaydırılmış resim merkezine uygular. Resim görünmezse başarısız olur.
find Bir record: Found, X, Y, Width, Height, CenterX, CenterY, Similarity (görünmediyse Found false).
exists true veya false.
waitvanish Resim kaybolana kadar bekler (bir yükleniyor simgesi, bir "lütfen bekleyin" bandı); zaman aşımından sonra başarısız olur.

Not: Resim yakalandığı boyutta bulunur. Onu, görevi çalıştıracak ajanla aynı ekran ölçeklendirmesine (uzak oturumlarda aynı çözünürlüğe) sahip bir makinede yakalayın.

Ekranı bekleme

wait komutunun masaüstü türleri de vardır:

wait --type:windowexists --window:$erp$
wait --type:windownotexists --window:$progress$ --timeout:300
wait --type:desktopelement --window:$erp$ --by:name --target:"Save"
wait --type:desktopelementgone --window:$erp$ --by:name --target:"Loading"
wait --type:screenchange --window:$erp$ --x:0 --y:40 --width:800 --height:500
wait --type:screenchange --until:stable --stablefor:3 --tolerance:1
wait --type:image --image:"C:\Pictures\ok-button.png" --window:$citrix$ --timeout:60
wait --type:imagegone --image:"C:\Pictures\spinner.png" --timeout:120

image ve imagegone, bir resmin ekranda görünmesini veya kaybolmasını bekler; image komutundaki --image, --window ve --similarity parametrelerini kullanır. Resmi Capture picture ile işaretleyin.

screenchange, ekranı, bir pencereyi veya bunun bir alanını izler:

  • --until:change (varsayılan) görüntü farklılaşana kadar bekler; --until:stable, görüntü --stablefor saniye boyunca (varsayılan 2) aynı kalana kadar bekler.
  • --tolerance, sayılmadan değişebilecek piksellerin yüzdesidir (varsayılan 0).

Alanı işaretleme

Koordinat yazmak yerine Window altındaki Mark area düğmesine tıklayın. Ajan makinesinde ekran karartılır; değişen kısmın (bir durum metni, bir ilerleme alanı) çevresine bir dikdörtgen sürükleyin. Esc veya sağ tıklama işlemi iptal eder. Alan, komutun penceresine göre ayarlanır; pencere yoksa düzenleyici Window alanını alanın altındaki pencereye yönlendirir veya boş masaüstü üzerindeyse alanı ekrana göre tutar. Clear, yeniden tüm pencereyi veya ekranı izler. screenshot ve ocr da aynı şekilde Mark area sunar.

Bir beklemenin süresi dolduğunda, --failontimeout:true komutu başarısız kılmadığı sürece görev bir uyarıyla devam eder (--output değişkenine false atanır).

Ekranı bir koşulda denetleme

Ekranda görünene göre dallanmak için if veya elseif bloğuna bir ekran koşulu verin: desktop --action:exists (veya image --action:exists) ve ardından if --type:boolean yerine tek bir blok.

if --type:desktopelementexists --window:$erp$ --by:name --target:"Save" --timeout:5
    desktop --action:click --window:$erp$ --by:name --target:"Save"
elseif --type:imageexists --image:"C:\Pictures\save.png" --window:$citrix$
    image --action:click --image:"C:\Pictures\save.png" --window:$citrix$
else
    throw --message:"No Save button on the screen"
endif
if --type:desktopelementnotexists --window:$erp$ --by:name --target:"Loading" --timeout:60
    log --message:"The ERP is ready"
endif

Özellikler panelinde desktop komutundaki Capture düğmesi ve Object properties tablosu, image komutundaki Capture picture ve önizlemesi aynen görünür. --timeout (varsayılan 0), karar vermeden önce elementin ya da resmin görünmesi (…exists) veya kaybolması (…notexists) için en fazla o kadar saniye bekler. Bulunamayan bir element, pencere ya da resim bir hata değil, bir yanıttır. Tüm koşul türleri için if / elseif / else bölümüne bakın.

Pano

clipboard, oturum açmış kullanıcının Windows panosundaki metni okur ve yazar:

sendkeys --window:$erp$ --keys:"[CTRL+A][CTRL+C]"
clipboard --action:gettext --output:copied
clipboard --action:settext --text:$orderNo$
clipboard --action:clear

Panoda metin yoksa gettext boş bir değer döndürür.

Masaüstü otomasyonu oturum açılmış bir oturum gerektirir

Windows hizmetleri, masaüstü olmayan Session 0'da çalışır: pencereleri göremez ve tıklayamazlar. Bu nedenle Botream Agent görevleri, oturum açmış kullanıcının masaüstünde, tepsi uygulamasında çalıştırır:

  • Kurulu makinelerde BotreamAgent Windows hizmeti tepsi uygulamasını denetler: onu etkin kullanıcı oturumunda başlatır ve bir çökmeden sonra yeniden başlatır.
  • Bu nedenle masaüstü ve görünür tarayıcı adımlarının çalışması için makinede bir kullanıcının oturum açmış ve oturumun kilidinin açık olması gerekir.
  • Gözetimsiz robot makineleri Windows'ta otomatik olarak oturum açar (auto-logon), ekranı ekran koruyucu olmadan açık tutar ve bağlantısı kesilen bir Uzak Masaüstü oturumunu kilitsiz kalması için konsola geri taşır. Bkz. Ajanları kurma.
  • Element yakalama, Mark area ve Pick araçları ve masaüstü kaydedicisi de tepsi uygulamasında çalışır; bu nedenle üzerinde çalıştığınız bilgisayarda tepsi uygulaması gereklidir.
Botream 0.1.1 · Oluşturulma 2026-10-14