java-client icon indicating copy to clipboard operation
java-client copied to clipboard

AndroidFindBy View Tag Support

Open iChip opened this issue 6 years ago • 6 comments

I'd like to use the @AndroidFindBy annotation for finding elements by view tag on Android, I am specifying a test ID through this attribute as we cannot use resource ids for targeting views when using React Native.

It does not seem like @AndroidFindBy currently supports this. I see MobileBy.ByAndroidViewTag, but I believe this cannot be used with the page object model to initially locate elements.

Is the only workaround an xpath selector (which I believe requires knowing the tag name in advance in addition to the view tag)? e.g. driver.findElementByXPath("//android.widget.TextView[@view-tag='some-tag']"

iChip avatar Nov 20 '19 21:11 iChip

Tagging @dpgraham since he's my guy on the inside + appears to have some context

iChip avatar Nov 20 '19 22:11 iChip

@iChip : As per current implementation, AndroidFindBy(tagName="some-tag") itself will work. Just give a try and let us know.

jayandran-Sampath avatar Nov 28 '19 10:11 jayandran-Sampath

Thanks, It does work, but I am confused by the naming. Your solution seems more sensible, the existing tagName annotation does not seem to correctly describe this locator strategy.

I added some comments on your closed PR: https://github.com/appium/java-client/pull/1271#discussion_r356983682

iChip avatar Dec 12 '19 07:12 iChip

is this project run in Android because i m not able to run this please give the link

vaishaliidnani avatar Dec 18 '19 06:12 vaishaliidnani

@iChip @dpgraham try to Create a custom annotation:

just like

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface AndroidFindByViewTag {
    String value();
}

VivekShahare04 avatar Jul 10 '24 07:07 VivekShahare04

Hi @iChip,

In React Native apps where resource-id isn’t available, we often rely on view-tag (mapped from testID). While MobileBy.AndroidViewTag("some-tag") works, it’s not usable with @AndroidFindBy, limiting Page Object Model usage.

Currently, the workaround is using XPath like: @AndroidFindBy(xpath = "//android.widget.TextView[@view-tag='some-tag']") But this requires knowing the class name, making it fragile.

Support for something like @AndroidFindBy(viewTag = "some-tag") would be a clean solution. Happy to contribute if this is feasible!

Thanks 🙌

ranjeetksingh55 avatar Jun 19 '25 18:06 ranjeetksingh55