【发布时间】:2016-03-25 08:39:15
【问题描述】:
IOSElements 包含 .setValue() 方法,它的类型比 sendKeys() 快得多。但是,如果我将元素(使用 @FindBy 注释)设置为 IOSElement 而不是 WebElement,PageFactory 将返回错误:
java.lang.IllegalArgumentException:无法将 io.appium.java_client.ios.IOSElement 字段 screen.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);
}
}
【问题讨论】:
标签: java webdriver appium pageobjects