Ana içeriğe geç
Tarihsel uygulama — güncel mimari tarafından değiştirildi (2026-10-04)

Bu sayfa önceki Python/Selenium recorder tasarımını korur. Güncel Node bridge kaynağı altı MCP aracı ile init, --version ve --help sunar; testfly studio, testfly ui veya testfly record komutlarını içermez. Aşağıdaki komutlar, port davranışları ve araç sayıları tarihsel uygulamayı anlatır. Güncel kaynak kurulumu için MCP Bridge & CLI, mimari için MCP mimarisi sayfasını izleyin.

İnteraktif Kaydedici & Chrome Companion

TestFly İnteraktif Kaydedici (Interactive Recorder), gerçek kullanıcı tarayıcı etkileşimlerini doğrudan üretime hazır Java test otomasyon koduna dönüştüren canlı bir refakatçi stüdyosudur.

Chrome DevTools Protocol (CDP) üzerinden enjekte edilen bir Chrome refakatçi penceresi ile gerçek zamanlı Server-Sent Events (SSE) akışını birleştirir. Yapılan her tıklama, metin girişi, açılır menü seçimi ve assertion anında stüdyoya iletilir ve TestFly Java 21+ standartlarında derlenir.

testfly record https://www.saucedemo.com

Mimari Genel Bakış​

┌────────────────────────────────────────────────────────────────────────────────────────┐
│ GOOGLE CHROME (REFAKATÇİ) │
│ ┌────────────────────────────────────┐ ┌─────────────────────────────────────┐ │
│ │ Canlı Web Uygulaması │ ────▶ │ Enjekte Edilen Kaydedici JS │ │
│ │ (Tıklamalar, Metin Girişi, Seçim) │ │ (Olay Yakalayıcı & Birleştirici) │ │
│ └────────────────────────────────────┘ └──────────────────┬──────────────────┘ │
└──────────────────────────────────────────────────────────────────┼─────────────────────┘
│ POST /api/event (Canlı Kullanıcı Eylemleri)
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ TESTFLY YEREL SUNUCU & KOD ÜRETİM MOTORU │
│ ┌────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────┐ │
│ │ HTTP Sunucu & Modlar │ ───▶ │ TestFly Kod Üretici │ ───▶ │ SSE Yayını │ │
│ │ (/api/event, /mode) │ │ (POM, TestNG, Cucumber) │ │ (/api/stream) │ │
│ └────────────────────────┘ └─────────────────────────┘ └────────┬────────┘ │
└────────────────────────────────────────────────────────────────────────────┼───────────┘
│ Gerçek Zamanlı Akış
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ TESTFLY WEB STÜDYOSU (:8765) │
│ ┌────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────┐ │
│ │ Kayıtlı Adım Zaman │ │ Akıllı Seçici Testi │ │ Çoklu Mimari │ │
│ │ Çizelgesi (Events) │ │ (Canlı Eşleşme Kontrol) │ │ Kod Merkezi │ │
│ └────────────────────────┘ └─────────────────────────┘ └────────┬────────┘ │
└────────────────────────────────────────────────────────────────────────────┼───────────┘
│ "Save to Project"
▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ TEST PROJENİZ │
│ ┌────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────┐ │
│ │ src/test/java/... │ │ src/test/java/... │ │src/test/resource│ │
│ │ /pages/ │ │ /tests/ │ │ s/features/ │ │
│ │ (BasePage Sınıfları) │ │ (BaseTest & Koşucular) │ │(.feature BDD) │ │
│ └────────────────────────┘ └─────────────────────────┘ └─────────────────┘ │
└────────────────────────────────────────────────────────────────────────────────────────┘

Kaydediciyi Başlatma​

Komut Satırı Kullanımı​

# Herhangi bir web sitesinde canlı kaydı başlat
testfly record https://example.com

# Özel port belirterek başlat (port doluysa otomatik artırılır)
testfly record https://example.com --port 9000

# Masaüstü tarayıcısını otomatik açmadan başlat
testfly record https://example.com --no-browser

Otomatik Chrome Companion Başlatma​

testfly record komutu çalıştırıldığında:

  1. Port Seçimi: TestFly varsayılan olarak 8765 portunu dinler. Port başka bir uygulama tarafından kullanılıyorsa, sonraki 20 portu (8766, 8767, ...) otomatik tarar ve ilk boş porta bağlanır.
  2. Web Güvenlik Parametreleri: Google Chrome, izole bir kullanıcı profiliyle ve gevşetilmiş yerel güvenlik bayraklarıyla (--disable-web-security, --allow-running-insecure-content) açılır. Böylece yerel sunucuya yapılan çağrılarda CORS veya preflight engelleri yaşanmaz.
  3. CDP Betik Enjeksiyonu: Chrome DevTools Protocol (Page.addScriptToEvaluateOnNewDocument) üzerinden injected_recorder.js betiği enjekte edilir. Bu sayede sayfa yenilendiğinde veya başka sayfalara geçildiğinde kaydedici kesintisiz çalışmaya devam eder.

Etkileşimlerin Kaydedilmesi​

1. Doğal Kullanıcı Eylemleri​

Refakatçi Chrome penceresinde tıpkı bir son kullanıcı gibi gezinin:

  • Tıklamalar: Erişilebilirlik öncelikli seçicilerle (data-testid, rol, ARIA etiketi, ID, CSS) yakalanır.
  • Metin Girişi: Tuş vuruşları akıllı birleştirme (debouncing) ile toplanır. Her karakter ayrı bir işlem oluşturmak yerine ardışık girişler tek bir enterUsername("standard_user") adımında birleştirilir.
  • Form Kontrolleri: Açılır menüler, onay kutuları ve butonlar akıcı TestFly metotlarına dönüştürülür.

2. Assertion (Doğrulama) Kayıt Modları​

TestFly Studio, kod yazmadan görsel olarak doğrulama adımları eklemeniz için özel araç çubuğu butonları sunar:

Doğrulama ModuEylem / KısayolÜretilen Kod
👁️ Assert Visibleİnceleme modunda öğeye tıklayınassertThat(getByTestId("item-header")).isVisible();
✅ Assert EnabledEtkinlik modunda öğeye tıklayınassertThat(getByTestId("submit-btn")).isEnabled();
💬 Assert TextÖğeye tıklayın; açılan modalda metni onaylayınassertThat(getByTestId("price")).hasText("29.99");

[!TIP] Assert Text modunda bir öğeye tıkladığınızda Stüdyo üzerinde bir doğrulama penceresi açılır. Öğenin mevcut metnini kontrol edebilir, Tam Eşleşme (hasText(...)) veya İçerik Eşleşmesi (containsText(...)) tercihinizi belirleyebilirsiniz.


Akıllı Seçici Test Edici (Smart Locator Tester)​

Zaman çizelgesi panelinin alt kısmında canlı bir Smart Locator Tester bulunur:

  1. Herhangi bir seçici ifadesi yazın veya yapıştırın (örn. getByTestId("login-button"), //button[@type='submit'], #user-name).
  2. Durum rozeti, canlı sayfadaki eşleşme sayısını anında raporlar (1 match, 0 matches, N matches).
  3. Doğruladığınız seçiciyi 📋 Kopyala butonuna tıklayarak panonuza alabilirsiniz.

Çoklu Mimari Java Kod Üretimi​

Tarayıcıda işlem yaptıkça sağ taraftaki kod paneli 4 farklı mimari için eşzamanlı olarak renklendirilmiş kod üretir:

1. Page Object Model (pom)​

Sorumlulukları Page Object sınıfları ve test sınıfları olarak temiz bir şekilde ayırır:

  • BasePage Sınıfı: Erişilebilirlik öncelikli Locator alanlarını ve akıcı aksiyon metotlarını barındırır.
  • BaseTest Sınıfı: open("/") çağrısı ve web-first doğrulamalarla test akışını yürütür.
// ============================================================
// File: com/example/pages/HomePage.java
// ============================================================
package com.example.pages;

import io.testfly.test.BasePage;
import io.testfly.locator.Locator;
import org.openqa.selenium.WebDriver;

public class HomePage extends BasePage {

private final Locator username = getByTestId("username");
private final Locator password = getByTestId("password");
private final Locator login = getByTestId("login-button");
private final Locator continueElement = getByTestId("continue");

public HomePage(WebDriver driver) {
super(driver);
}

public HomePage enterUsername(String text) {
username.type(text);
return this;
}

public HomePage clickLogin() {
login.click();
return this;
}

public HomePage clickContinueElement() {
continueElement.click();
return this;
}
}

2. Bağımsız TestNG (testng)​

TestFly'ın sürücü yaşam döngüsünü yönettiği, BaseTest genişleten tek dosyalı TestNG sınıfı üretir.

3. Bağımsız JUnit 5 (junit5)​

BaseJUnit5Test sınıfını genişleten tek dosyalı JUnit 5 test sınıfı üretir.

4. Cucumber BDD (cucumber)​

Eksiksiz üç katmanlı BDD paketi üretir:

  • Gherkin Feature: src/test/resources/features/*.feature
  • Step Definitions: BaseCucumberSteps genişleten @When, @Then adımları
  • Test Runner: BaseCucumberTest genişleten koşucu sınıf

Projeye Kaydetme & Temiz Dizin Yönlendirmesi​

Stüdyoda 💾 Save to Project butonuna tıkladığınızda kodlar tek bir dosya içerisine dökülmez; Maven/Gradle dizin standartlarına uygun olarak ayrı dosyalara yazılır.

Dizin Yapısı​

TestFly proje kökünü otomatik algılar ve dosyaları doğru dizinlere yerleştirir:

projeniz/
├── pom.xml
└── src/
└── test/
├── java/
│ └── com/example/
│ ├── pages/
│ │ └── HomePage.java <-- Page Object (BasePage)
│ └── tests/
│ ├── HomeTest.java <-- POM Testi (BaseTest)
│ ├── RecordedWebTest.java <-- TestNG / JUnit5 Testi
│ ├── steps/
│ │ └── HomeSteps.java <-- Cucumber Step Tanımları
│ └── runners/
│ └── RunCucumberTest.java <-- Cucumber Koşucu
└── resources/
└── features/
└── home.feature <-- Gherkin Feature Dosyası

Derleyici Güvenlik Önlemleri​

  • Java Rezerve Kelime Koruması: Java dilinde anahtar kelime olan isimler (continue, break, return, class, default, switch, goto) otomatik olarak continueElement, clickContinueElement() gibi geçerli tanımlayıcılara dönüştürülür.
  • Sayısal Ön Ek Koruması: Rakamla başlayan öğeler Java kurallarına uygun olarak el1Items şeklinde ön ek alır.
  • Yorum Satırlı Dosya Ayraçları: Tüm dosya başlıkları Java için //, Gherkin için # yorum satırlarıyla işaretlenir; derleme sırasında sözdizimi hatalarının önüne geçilir.