Java PageFactory和Appium';IOSS元素不兼容-替代解决方案?
IOS元素包含.setValue()方法,该方法的键入速度比sendKeys()快得多。但是,如果我将我的元素(使用@FindBy注释)设置为IOSSelement而不是WebElement,PageFactory将返回一个错误: java.lang.IllegalArgumentException:无法将io.appium.java_client.ios.IOSElement字段screens.LoginScreen.signInEmail设置为org.openqa.selenium.remote.RemoteWebElement$$EnhancerByGlib$$62779 此外,我不能将WebElements强制转换为IOSElements,因为这也会从JVM返回一个错误(不能强制转换) 是否有一种使用PageFactory设计初始化元素的方法?我的示例代码如下:Java PageFactory和Appium';IOSS元素不兼容-替代解决方案?,java,webdriver,appium,pageobjects,Java,Webdriver,Appium,Pageobjects,IOS元素包含.setValue()方法,该方法的键入速度比sendKeys()快得多。但是,如果我将我的元素(使用@FindBy注释)设置为IOSSelement而不是WebElement,PageFactory将返回一个错误: java.lang.IllegalArgumentException:无法将io.appium.java_client.ios.IOSElement字段screens.LoginScreen.signInEmail设置为org.openqa.selenium.remo
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);
}
import io.appium.java_client.ios.IOSElement;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
import io.appium.java_client.pagefactory.iOSFindBy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
public class ATestClass {
private WebDriver driver;
@iOSFindBy(className = "classname")
public IOSElement testing;
public ATestClass(WebDriver driver)
{
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public void ATestMethod()
{
testing.click();
}
}
}您可以尝试使用
@iOSFindBy
注释作为WebElement
类型的定位器。
你可以在Appium上找到一些例子。
举个例子,我在想的另一件事是尝试使用MobileElement
而不是WebElement
编辑:
我现在已经尝试过了,我能够使用@iOSFindBy
注释以及ioseelement
定位器类型。
我已经建立了一个简单的类,在我的Mavenpom.xml
中使用了以下内容:
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>2.1.0</version>
</dependency>
注意:
MobileElement
locators类型时也会发生同样的情况,因此,如果您仍然看到任何错误,请检查您拥有的任何依赖项,因为它们很可能是导致错误的依赖项。看起来我的问题在于我使用的是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();-没有错误。不幸的是,使用iOSFindBy仍然给我留下了一个问题,我只能初始化WebElements。我无法将它们转换为MobileElement或IOSSelement。已使用示例代码更新了我的答案。请检查并尝试在一个全新的项目中自己尝试,以确定您的问题是来自库还是来自原始项目中的其他部分。考虑使用AppIuMuthor驱动程序代替Webdriver