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:
- Port Seçimi: TestFly varsayılan olarak
8765portunu 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. - 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. - CDP Betik Enjeksiyonu: Chrome DevTools Protocol (
Page.addScriptToEvaluateOnNewDocument) üzerindeninjected_recorder.jsbetiğ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 Modu | Eylem / Kısayol | Üretilen Kod |
|---|---|---|
| 👁️ Assert Visible | İnceleme modunda öğeye tıklayın | assertThat(getByTestId("item-header")).isVisible(); |
| ✅ Assert Enabled | Etkinlik modunda öğeye tıklayın | assertThat(getByTestId("submit-btn")).isEnabled(); |
| 💬 Assert Text | Öğeye tıklayın; açılan modalda metni onaylayın | assertThat(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:
- Herhangi bir seçici ifadesi yazın veya yapıştırın (örn.
getByTestId("login-button"),//button[@type='submit'],#user-name). - Durum rozeti, canlı sayfadaki eşleşme sayısını anında raporlar (
1 match,0 matches,N matches). - 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
Locatoralanları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:
BaseCucumberStepsgenişleten@When,@Thenadımları - Test Runner:
BaseCucumberTestgeniş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 olarakcontinueElement,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.