IOSElements PageFactory и Appium несовместимы - альтернативное решение?

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);
}

}


person SeeYaLater Automator    schedule 18.12.2015    source источник


Ответы (2)


Похоже, моя проблема заключалась в том, что я использовал удаленный экземпляр WebDriver, например:

this.driver = new WebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

Однако я могу получить экземпляр IOSDriver с идентичной настройкой:

this.driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

Это принимает IOSElements при передаче в PageFactory.initElements(); - Нет ошибок.

person SeeYaLater Automator    schedule 21.12.2015

person    schedule
comment
К сожалению, использование iOSFindBy по-прежнему оставляет меня с проблемой, заключающейся в том, что я могу только инициализировать WebElements. Я не могу передать их в MobileElement или iOSElement. - person SeeYaLater Automator; 21.12.2015
comment
Обновлен мой ответ с примером кода. Пожалуйста, проверьте и, возможно, попробуйте это сами в совершенно новом проекте, просто чтобы определить, связана ли ваша проблема с библиотеками или с какой-то другой частью вашего исходного проекта. - person Cosmin; 21.12.2015
comment
рассмотрите возможность использования драйвера AppiumDriver‹MobileElement› вместо Webdriver - person Tejasvi Manmatha; 04.08.2016