PageFactory和Appium的IOSElements不兼容 - 替代解决方案?

时间:2015-12-18 15:32:02

标签: java webdriver appium pageobjects

IOSElements包含.setValue()方法,其类型比sendKeys()快得多。但是,如果我将我的元素(使用@FindBy注释)设置为IOSElement而不是WebElement,则PageFactory将返回错误:

java.lang.IllegalArgumentException:无法将io.appium.java_client.ios.IOSElement字段screens.LoginScreen.signInEmail设置为org.openqa.selenium.remote.RemoteWebElement $$ EnhancerByCGLIB $$ 62bef779

此外,我无法将WebElements转换为IOSElements,因为它也会从JVM返回错误(无法转换)。

有没有办法使用PageFactory设计初始化IOSElements?我的示例代码如下:

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

}

1 个答案:

答案 0 :(得分:0)

看起来我的问题是我正在使用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);

传递给PageFactory.initElements()时接受IOSElements; - 没有错误。