SmartestQADocs
CUSTOM CODE

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.

selector: XPath veya CSS timeout: saniye (varsayılan: 10) return: dönüş değeri

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.