Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Element not found exception using id or xpath attribute with @AndroidFindBy

オープン
#1,968 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 5 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
25/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
android, java

調査の方向性

まず BasePage.java と LoginPage.java の locator 宣言と初期化フローを確認し、次に Android および XPath の Appium ログをインスペクターのスクリーンショットと比較します。失敗が Java クライアントの検索パスにあるのか、アプリが報告する要素属性にあるのかを検証します。再現可能な原因を特定し、必要な修正を文書化できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Description

I am writing a simple login test for my Android app using the Appium-java client.
I am also using Page Object Model and Page Factory class to initialize elements in my test.
The test is failing as it cannot locate the email address input field.
I tried to locate the email field using both id and xpath attribute with @AndroidFindBy field decorator but it [didn't] work.
Looking for help on this issue.

Environment

  • Java client build version: 8.5.1
  • Appium server version or git revision if you use some snapshot: Appium v2.0.0-rc.5
  • Device: Android emulator

Code To Reproduce Issue [ Good To Have ]

BasePage.java:

public class BasePage {
    AppiumDriver driver;
    public static final long WAIT = 30;

    public BasePage(AppiumDriver appiumDriver) {
        PageFactory.initElements(new AppiumFieldDecorator(appiumDriver), this);
        driver = appiumDriver;
    }

    public void click(WebElement element) {
        waitForVisibility(element);
        element.click();
    }

    public void enterText(WebElement element, String text) throws InterruptedException {
        Thread.sleep(20000);
        element.sendKeys(text);
    }
}

LoginPage.java

public class LoginPage extends BasePage {
    public LoginPage(AppiumDriver appiumDriver) {

        super(appiumDriver);
    }

    @AndroidFindBy(id = "loginId")
    WebElement emailAddressInput;

    @AndroidFindBy(id = "button-username")
    @iOSXCUITFindBy(id = "button-username")
    WebElement continueButton;

    @FindBy(id = "password")
    @iOSXCUITFindBy(id = "password")
    WebElement passwordInput;

    @AndroidFindBy(id = "button-password")
    @iOSXCUITFindBy(id = "button-password")
    WebElement signInButton;

    public void enterEmailAddressAndProceed(String email) throws InterruptedException {
        enterText(emailAddressInput, email);
        enterText(passwordInput, "password");
        //click(continueButton);
    }
}

BaseTest.java

public class BaseTest {

    public static AppiumDriver driver;
    public static void androidSetUp() throws MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("appium:automationName", "UiAutomator2");
        capabilities.setCapability("appium:platformVersion", "14");
        capabilities.setCapability("appium:deviceName", "Android Emulator");
        capabilities.setCapability("adbExecTimeout", 900000);
        capabilities.setCapability("uiautomator2ServerLaunchTimeout", 50000);
        capabilities.setCapability("appium:appWaitActivity", "com.vimcar.nextlogbook.feature.useronboarding.authentication.presentation.LoginActivity");
        capabilities.setCapability("appium:newCommandTimeout", 120);
        capabilities.setCapability("appium:app", System.getProperty("user.dir")+"/src/test/resources/next-logbook-debug.apk");

        driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), capabilities);
    }

    public static void tearDown() {
        if(null != driver) {
            driver.quit();
        }
    }
}

LoginTest.java

public class LoginTest extends BaseTest {
    LoginPage loginPage;

    @Test
    public void existingUserLoginTest() throws Exception {
        androidSetUp();
        loginPage = new LoginPage(driver);
        loginPage.enterEmailAddressAndProceed("[email protected]");
        tearDown();
    }
}

Exception Stacktraces

[AndroidUiautomator2Driver@fdfb (4d103231)] Got response with status 404: {"sessionId":"14ea4cc4-5028-468c-9007-59f3acc79c4a","value":{"error":"no such element","message":"An element could not be located on the page using the given search parameters","stacktrace":"io.appium.uiautomator2.common.exceptions.ElementNotFoundException: An element could not be located on the page using the given search parameters\n\tat io.appium.uiautomator2.handler.FindElement.safeHandle(FindElement.java:63)\n\tat io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)\n\tat io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)\n\tat io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)\n\tat io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:68)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)\n\tat io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)\n\tat io.netty.chann...
[debug] [W3C] Matched W3C error code 'no such element' to NoSuchElementError
[debug] [AndroidUiautomator2Driver@fdfb (4d103231)] Encountered internal error running command: NoSuchElementError: An element could not be located on the page using the given search parameters.

Link To Appium Logs

Appium logs when searching by id:
https://gist.github.com/p-saxena/3aaead9344a9acf220f1868f47527960

Appium logs when searching by XPath:
https://gist.github.com/p-saxena/9daed82487152f6e203c7a1e6aec25c3

Appium inspector screenshot:
appium-inspector

主要言語
Java
スター
1.3k
フォーク
755
平均マージ
5日 14時間
マージ済み PR(30日)
8

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

appium/java-client のほかの issue

appium/java-client の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。