Как создать объектную модель страницы, которая работает для Android и iOS в Appium Java - PullRequest
0 голосов
/ 04 февраля 2019

Я создал объект страницы в Java с Appium и Selenium, который в настоящее время работает для приложения 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 и iOSapp, селектор xpath различен для обоих приложений.Я думаю, что мне нужно сделать что-то вроде этого:

@AndroidFindBy(xpath = “androidxpath”)
@iOSFindBy(xpath = “iOSxpath”)
public MobileElement verifyTitle ;

Это будет означать, независимо от того, использую ли я Android или iOS, я все равно просто буду использовать одну переменную под названием 'verifyTitle'.

Тем не менее, когда я делаю это, строка driver.findElement (String actualTitle = driver.findElement (verifyTitle) .getText () показывает следующую ошибку:

findElement
(org.openqa.selenium.By)
in DefaultGenericMobileDriver cannot be applied
to
(io.appium.java_client.MobileElement)

Мне кажется, я сравниваю AppiumElements с SeleniumElements, но яЯ не уверен, как решить эту проблему.

Любая помощь будет принята с благодарностью.

Спасибо

Мэтт

1 Ответ

0 голосов
/ 05 февраля 2019

Да, много смешивания типов объектов в вашем исходном примере.Вы на правильном пути с аннотациями @OSFindBy.После того, как вы определили эти элементы, у вас уже есть элемент, поэтому нет необходимости искать его снова.Следующее будет всем, что вам нужно:

verifyTitle.getText()

См. Этот блог для получения дополнительной информации о объектной модели страницы (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 для жизни.Склонен к ошибкам, но должен дать вам представление.

...