Ana içeriğe geç

Özel Driver'lar

NamedDriverProvider, framework'ü değiştirmeden herhangi bir WebDriver uygulamasını bağlamanızı sağlar — Appium, özel bir Selenium Grid sarmalayıcısı veya niş bir tarayıcı. Özel sağlayıcılar, yerleşik sağlayıcılara göre öncelik kazanır.

Edge ve Safari yerleşiktir

Edge veya Safari için özel bir sağlayıcıya ihtiyacınız yok. testfly.yml içinde browser.name: edge veya browser.name: safari ayarlayın ve TestFly bunları yerel olarak halleder.


Appium örnekleri, uyumlu Appium Java client bağımlılığını ve çalışan bir Appium sunucusunu sizin eklemenizi gerektirir. TestFly bu client bağımlılığını içermez.

Özel bir driver sağlayıcısı oluşturun​

import io.testfly.driver.NamedDriverProvider;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.options.UiAutomator2Options;
import org.openqa.selenium.WebDriver;

public class AndroidProvider implements NamedDriverProvider {

@Override
public String browserName() {
return "android"; // testfly.yml içindeki browser.name ile büyük/küçük harfe duyarsız eşleştirilir
}

@Override
public WebDriver createDriver() {
UiAutomator2Options options = new UiAutomator2Options();
options.setPlatformName("Android");
options.setDeviceName("Pixel 7");
options.setApp("/path/to/app.apk");
return new AndroidDriver(options);
}
}

Java SPI ile kaydettirin (otomatik keşif)​

src/main/resources/META-INF/services/io.testfly.driver.NamedDriverProvider

İçerik:

com.example.drivers.AndroidProvider

Ardından yapılandırmanızda browser.name değerini ayarlayın:

testfly.yml
browser:
name: android

TestFly sağlayıcınızı otomatik olarak seçer.


Programatik olarak kaydettirin​

import io.testfly.driver.DriverProviderRegistry;

DriverProviderRegistry.register(new AndroidProvider());

BrowserStack örneği​

import io.testfly.driver.NamedDriverProvider;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.util.HashMap;

public class BrowserStackProvider implements NamedDriverProvider {

@Override
public String browserName() { return "browserstack"; }

@Override
public WebDriver createDriver() {
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> bstackOptions = new HashMap<>();
bstackOptions.put("userName", System.getenv("BROWSERSTACK_USERNAME"));
bstackOptions.put("accessKey", System.getenv("BROWSERSTACK_ACCESS_KEY"));
bstackOptions.put("browserName", "Chrome");
bstackOptions.put("browserVersion", "latest");
options.setCapability("bstack:options", bstackOptions);

try {
return new RemoteWebDriver(
java.net.URI.create("https://hub-cloud.browserstack.com/wd/hub").toURL(), options);
} catch (java.net.MalformedURLException e) {
throw new IllegalStateException("Invalid BrowserStack endpoint", e);
}
}
}
testfly.yml
browser:
name: browserstack

Appium örneği​

public class AndroidAppProvider implements NamedDriverProvider {

@Override
public String browserName() { return "android"; }

@Override
public WebDriver createDriver() {
UiAutomator2Options options = new UiAutomator2Options()
.setDeviceName("emulator-5554")
.setApp("/path/to/app.apk");

try {
return new AndroidDriver(java.net.URI.create("http://127.0.0.1:4723").toURL(), options);
} catch (java.net.MalformedURLException e) {
throw new IllegalStateException("Invalid Appium endpoint", e);
}
}
}

Sağlayıcı seçim sırası​

  1. Uzak mod (execution.mode: remote) → her zaman RemoteDriverProvider kullanır
  2. Özel sağlayıcı SPI veya programatik olarak kaydedilir → browser.name değeri browserName() ile eşleşiyorsa kullanılır
  3. Yerleşik Chrome → browser.name: chrome ise kullanılır
  4. Yerleşik Firefox → browser.name: firefox ise kullanılır