java - 如何在 Appium Java 中创建适用于 Android 和 iOS 的页面对象模型

标签 java selenium appium pageobjects page-factory

我已经使用 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/

相关文章:

java - Spring Data + Mongo列表嵌套复杂类型在mongo中使用id作为属性

javascript - 如何使用 Selenium 或 Protractor 获取 HTML 中嵌套元素的文本以实现自动化?

android - 如何阻止appium清除Android应用数据?

java - 在 session 范围内存储对象列表 Spring MVC 的 ApplicationListener

java - 在java中实现类似的接口(interface)

java - Selenium Grid+TestNG+Maven+pom.xml

java - 无法发送包含尖锐字符的按键字符串

java - 针对指定平台(Android 或 iOS)运行自动化测试。每次发布仅一个平台。如何指定Maven必须运行在哪个平台?

java - 在真实设备上的 appium 中并行运行

java - 重新渲染丰富:tabPanel without losing data