Element not found exception using id or xpath attribute with @AndroidFindBy
メンテナーはふだん 5 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 25/100
- issue の種類
- バグ
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
- 領域
- mobile-dev, testing-qa
調査の方向性
まず 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:
- 主要言語
- Java
- スター
- 1.3k
- フォーク
- 755
- 平均マージ
- 5日 14時間
- マージ済み PR(30日)
- 8
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
appium/java-client のほかの issue
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
appium/java-client#2426 ·
メンテナーはふだん 5 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 50/100
appium/java-client#2372 ·
メンテナーはふだん 5 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
appium/java-client#2368 ·
メンテナーはふだん 5 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 30/100
appium/java-client#2341 · コメント 1 件 ·
メンテナーはふだん 5 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
appium/java-client#2323 ·
メンテナーはふだん 5 日以内に返信
appium/java-client の issue をすべて見る
似ている issue
-
link-check link-check:manual
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
-
難易度 1/5 1時間未満 初心者へのやさしさ 91/100
open-telemetry/opentelemetry-java#8870 ·
メンテナーはふだん 1 日以内に返信
-
P2 testing
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
enhancement javascript
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
area/core kind/bug status/triage team/core-shared
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信