IOSElements содержат метод .setValue(), который печатает гораздо быстрее, чем sendKeys(). Однако, если я установлю свои элементы (используя аннотации @FindBy) в IOSElement, а не в WebElement, PageFactory вернет ошибку:
java.lang.IllegalArgumentException: невозможно установить поле screens.LoginScreen.signInEmail io.appium.java_client.ios.IOSElement для org.openqa.selenium.remote.RemoteWebElement$$EnhancerByCGLIB$$62bef779
Кроме того, я не могу преобразовать WebElements в IOSElements, так как это также вернет ошибку из JVM (невозможно преобразовать).
Есть ли способ инициализировать IOSElements с помощью дизайна PageFactory? Мой пример кода выглядит следующим образом:
public class LoginScreen {
private WebDriver driver;
@FindBy(className = "UIATextField")
public IOSElement signInEmail;
@FindBy(className = "UIASecureTextField")
public IOSElement signInPassword;
@FindBy(id = "Log in")
public IOSElement loginButton;
@FindBy(id = "Forgot your password?")
public IOSElement forgotPasswordButton;
public LoginScreen(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public SomeOtherObject login(String email, String password) {
signInEmail.setValue(email);
signInPassword.setValue(password);
loginButton.click();
return new SomeOtherObject(driver);
}
}