我已经使用 Appium 和 Selenium 在 Java 中创建了一个页面对象,该对象当前适用于 Android 应用程序,如下所示:
public class MattVerifyPage extends PageObject{
private AppiumDriver driver = FrameworkInitialize.driver;
By verifyTitle = By.xpath("/hierarchy/android.widget.TextView");
public void verifyTitle(String expectedTitle){
String actualTitle = driver.findElement(verifyTitle).getText();
但是,我需要它在 Android 应用程序和 iOS 应用程序上运行,这两个应用程序的 xpath 选择器是不同的。我想我需要做这样的事情:
@AndroidFindBy(xpath = “androidxpath”)
@iOSFindBy(xpath = “iOSxpath”)
public MobileElement verifyTitle ;
这意味着无论我使用的是 Android 还是 iOS,我仍然只使用名为“verifyTitle”的一个变量。
但是,当我这样做时,driver.findElement 行 (StringactualTitle = driver.findElement(verifyTitle).getText() 显示以下错误:
findElement
(org.openqa.selenium.By)
in DefaultGenericMobileDriver cannot be applied
to
(io.appium.java_client.MobileElement)
我想我正在将 AppiumElements 与 SeleniumElements 进行比较,但我不确定如何解决它。
任何帮助将不胜感激。
谢谢
马特
最佳答案
是的,在您的原始示例中存在大量对象类型的混合。使用 @OSFindBy 注释,您走在正确的轨道上。一旦定义了这些元素,您就已经拥有了该元素,因此无需再次查找它。您只需要以下内容:
verifyTitle.getText()
请参阅此博客文章,了解有关 Page Object Model 的更多信息。 (POM)。
摘要:
import all the good stuff including PageFactory;
public class YourPage {
private WebDriver driver;
public YourPage(AppiumDriver<MobileElement> driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
@AndroidFindBy(id = "android_button")
@iOSFindBy(id = "ios_button")
private MobileElement that_button;
public void pushTheButton() {
that_button.click()
}
}
注意:上面的代码未经测试/是我凭空写下来的/我不是以写 Java 为生。容易出错,但应该能给你一个想法。
关于java - 如何在 Appium Java 中创建适用于 Android 和 iOS 的页面对象模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523744/