Python Script Step
Custom Python kodları çalıştırın. Browser Commands kütüphanesi ile tarayıcı kontrolü, dosya işlemleri, API çağrıları ve karmaşık veri işleme.
Python Script Nedir?
Python Script Step, test akışı içinde custom Python kodu çalıştırmanızı sağlar. SmartestQA'nın browser ve params objeleri ile tarayıcıyı kontrol edebilir ve parametreler arasında veri aktarabilirsiniz.
Browser Kontrolü
Click, type, scroll, wait
Parametre Aktarımı
params.get / set
Custom Logic
Dosya, API, hesaplama
Python Script Editor
Monaco editör ile syntax highlighting
Browser Commands Kütüphanesi
SmartestQA'nın browser objesi ile tarayıcıyı kontrol edin. Tüm komutlar ve parametreleri aşağıda listelenmiştir.
Click Komutları
browser.click(selector)
void
Elemente tek tıklama yapar.
browser.click("//button[@id='submit']")
browser.click("#login-btn") # CSS selector
browser.double_click(selector)
void
Elemente çift tıklama yapar.
browser.double_click("//tr[@class='row']")
browser.right_click(selector)
void
Elemente sağ tıklama yapar (context menu açar).
browser.right_click("//div[@class='item']")
browser.hover(selector)
void
Mouse'u elementin üzerine getirir (hover efekti).
browser.hover("//div[@class='dropdown']")
Input Komutları
browser.type(selector, text)
void
Input alanına metin yazar.
browser.type("//input[@name='email']", "test@example.com")
browser.type("#password", "secret123")
browser.clear(selector)
void
Input alanını temizler.
browser.clear("//input[@id='search']")
browser.select_option(selector, value)
void
Dropdown'dan seçim yapar (value veya visible text).
browser.select_option("//select[@id='country']", "TR")
browser.select_option("#city", "İstanbul")
browser.upload_file(selector, filepath)
void
File input'a dosya yükler.
browser.upload_file("//input[@type='file']", "/path/to/document.pdf")
browser.press_key(key)
void
Klavye tuşuna basar (Enter, Tab, Escape vb.).
browser.press_key("Enter")
browser.press_key("Tab")
browser.press_key("Escape")
Get Komutları (Değer Alma)
browser.get_text(selector)
string
Elementin text içeriğini döndürür.
title = browser.get_text("//h1")
price = browser.get_text("//span[@class='price']")
browser.get_value(selector)
string
Input alanının value değerini döndürür.
email = browser.get_value("//input[@name='email']")
browser.get_attribute(selector, attribute)
string
Elementin belirtilen attribute değerini döndürür.
href = browser.get_attribute("//a", "href")
src = browser.get_attribute("//img", "src")
data_id = browser.get_attribute("//div", "data-id")
browser.get_url()
string
Mevcut sayfanın URL'ini döndürür.
current_url = browser.get_url()
browser.get_title()
string
Sayfa başlığını (title) döndürür.
page_title = browser.get_title()
browser.is_visible(selector)
boolean
Elementin görünür olup olmadığını döndürür.
if browser.is_visible("//div[@class='error']"):
print("Hata mesajı gösterildi")
browser.is_enabled(selector)
boolean
Elementin aktif (enabled) olup olmadığını döndürür.
if browser.is_enabled("//button[@id='submit']"):
browser.click("//button[@id='submit']")
browser.get_element_count(selector)
int
Selector'a uyan element sayısını döndürür.
row_count = browser.get_element_count("//table//tr")
print(f"Tabloda {row_count} satır var")
Wait Komutları (Bekleme)
browser.wait_for_element(selector, timeout=10)
void
Element DOM'da bulunana kadar bekler.
browser.wait_for_element("//div[@class='loaded']")
browser.wait_for_element("//table", timeout=30)
browser.wait_for_visible(selector, timeout=10)
void
Element görünür olana kadar bekler.
browser.wait_for_visible("//div[@id='modal']")
browser.wait_for_invisible(selector, timeout=10)
void
Element kaybolana kadar bekler (loading spinner vb.).
browser.wait_for_invisible("//div[@class='spinner']")
browser.wait_for_text(selector, text, timeout=10)
void
Element belirtilen text'i içerene kadar bekler.
browser.wait_for_text("//span[@id='status']", "Completed")
browser.sleep(seconds)
void
Belirtilen süre kadar bekler (hard wait - önerilmez).
browser.sleep(2) # 2 saniye bekle
Frame & Window Komutları
browser.switch_to_frame(selector)
void
Belirtilen iframe'e geçiş yapar.
browser.switch_to_frame("//iframe[@id='payment']")
browser.switch_to_default()
void
Ana sayfaya (default content) döner.
browser.switch_to_default()
browser.switch_to_window(handle)
void
Belirtilen pencereye geçiş yapar.
handles = browser.get_window_handles()
browser.switch_to_window(handles[1]) # İkinci pencere
browser.get_window_handles()
list
Açık tüm pencerelerin handle listesini döndürür.
handles = browser.get_window_handles()
print(f"{len(handles)} pencere açık")
browser.close_window()
void
Mevcut pencereyi kapatır.
browser.close_window()
Alert Komutları
browser.accept_alert()
void
JavaScript alert/confirm'i kabul eder (OK).
browser.accept_alert()
browser.dismiss_alert()
void
JavaScript alert/confirm'i reddeder (Cancel).
browser.dismiss_alert()
browser.get_alert_text()
string
Alert mesajını döndürür.
message = browser.get_alert_text()
print(f"Alert: {message}")
browser.send_alert_text(text)
void
Prompt alert'ına metin girer.
browser.send_alert_text("Onay kodu")
Diğer Komutlar
browser.screenshot(filename)
void
Ekran görüntüsü alır ve kaydeder.
browser.screenshot("login_success.png")
browser.execute_js(script)
any
JavaScript kodu çalıştırır ve sonucu döndürür.
title = browser.execute_js("return document.title")
browser.execute_js("window.scrollTo(0, document.body.scrollHeight)")
storage = browser.execute_js("return localStorage.getItem('token')")
browser.set_window_size(width, height)
void
Tarayıcı pencere boyutunu ayarlar.
browser.set_window_size(1920, 1080) # Full HD
browser.set_window_size(375, 812) # iPhone X
browser.maximize_window()
void
Pencereyi tam ekran yapar.
browser.maximize_window()
Params Objesi (Parametre Yönetimi)
params objesi ile test parametrelerini okuyup yazabilirsiniz. Adımlar arası veri aktarımı için kullanılır.
params.get(key)
string | None
Global parametrenin değerini döndürür.
username = params.get("username")
base_url = params.get("base_url")
params.set(key, value)
void
Parametre değerini ayarlar (sonraki adımlarda kullanılabilir).
order_id = browser.get_text("//span[@class='order-id']")
params.set("order_id", order_id)
# Sonraki adımda kullan
# {{order_id}} formatıyla veya params.get("order_id")
params.get_all()
dict
Tüm parametreleri dictionary olarak döndürür.
all_params = params.get_all()
for key, value in all_params.items():
print(f"{key}: {value}")
Örnek Kodlar
Login İşlemi
# Parametrelerden kullanıcı bilgilerini al
username = params.get("username")
password = params.get("password")
# Login formunu doldur
browser.type("//input[@id='email']", username)
browser.type("//input[@id='password']", password)
browser.click("//button[@type='submit']")
# Dashboard yüklenene kadar bekle
browser.wait_for_element("//div[@class='dashboard']", timeout=15)
# Başarılı login kontrolü
if browser.is_visible("//span[@class='user-name']"):
params.set("login_status", "success")
else:
params.set("login_status", "failed")
Tablo Verisi Çekme
# Tablodaki tüm satırları say
row_count = browser.get_element_count("//table[@id='orders']//tbody//tr")
params.set("total_orders", str(row_count))
# İlk satırdaki order ID'yi al
first_order = browser.get_text("//table[@id='orders']//tbody//tr[1]//td[1]")
params.set("first_order_id", first_order)
# Toplam tutarı al ve sayıya çevir
total_text = browser.get_text("//span[@class='total-amount']")
total = float(total_text.replace("₺", "").replace(",", "").strip())
params.set("total_amount", str(total))
JSON Dosyasından Veri Okuma
import json
# Test verisini oku
with open("test_data/users.json", "r", encoding="utf-8") as f:
users = json.load(f)
# İlk kullanıcıyı al
user = users[0]
browser.type("//input[@name='name']", user["name"])
browser.type("//input[@name='email']", user["email"])
browser.type("//input[@name='phone']", user["phone"])
Dinamik Veri Oluşturma
import random
import string
from datetime import datetime
# Random email oluştur
random_str = ''.join(random.choices(string.ascii_lowercase, k=8))
email = f"test_{random_str}@example.com"
params.set("generated_email", email)
# Bugünün tarihini al
today = datetime.now().strftime("%d/%m/%Y")
params.set("current_date", today)
# Random telefon numarası
phone = "05" + ''.join(random.choices(string.digits, k=9))
params.set("generated_phone", phone)
Yeni Pencere İşlemi
# Mevcut pencereyi kaydet
main_window = browser.get_window_handles()[0]
# Yeni pencere açan linke tıkla
browser.click("//a[@target='_blank']")
browser.sleep(1)
# Yeni pencereye geç
handles = browser.get_window_handles()
browser.switch_to_window(handles[1])
# İşlemleri yap
new_page_title = browser.get_title()
params.set("new_page_title", new_page_title)
# Yeni pencereyi kapat ve ana pencereye dön
browser.close_window()
browser.switch_to_window(main_window)
Sık Sorulan Sorular
Hangi Python kütüphaneleri kullanılabilir?
Standart Python kütüphaneleri (json, os, re, datetime, random, string vb.) ve SmartestQA'nın browser / params objeleri kullanılabilir. Ek kütüphane (requests, pandas vb.) için agent'a pip ile yükleme gerekir.
Python versiyonu nedir?
SmartestQA agent'lar Python 3.9+ kullanır. f-string, type hints ve walrus operator gibi modern Python özellikleri desteklenir.
Hata ayıklama nasıl yapılır?
print() kullanarak console'a log basabilirsiniz. Loglar test raporu ve Dry Run ekranında görünür. Ayrıca browser.screenshot("debug.png") ile anlık ekran görüntüsü alabilirsiniz.
Python Script vs JavaScript farkı nedir?
Python Script agent tarafında çalışır, dosya işlemleri yapabilir, external API'lere bağlanabilir. JavaScript ise tarayıcı içinde çalışır, DOM manipülasyonu ve localStorage erişimi için idealdir.