Ö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ı
- Uzak mod (
execution.mode: remote) → her zamanRemoteDriverProviderkullanır - Özel sağlayıcı SPI veya programatik olarak kaydedilir →
browser.namedeğeribrowserName()ile eşleşiyorsa kullanılır - Yerleşik Chrome →
browser.name: chromeise kullanılır - Yerleşik Firefox →
browser.name: firefoxise kullanılır