如何更改AndroidFindBy注解中的包名

How to change the package name in AndroidFindBy annotation

问题 :我想 运行 一个 Appium 脚本在同一个应用程序上,但构建不同。

应用中所有resource-Id都附加包名

例如:对于构建 A ,用户名文本字段是 - alpha.beta.charlie.delta:id/user_name

对于构建 B 用户名字段 alpha.beta.charlie/user_name ,增量从包名称中删除。

我使用页面工厂的 AndroidFindBy 来定位元素

    private static final PACKAGE = "alpha.beta.charlie.delta"

    @AndroidFindBy(id = PACKAGE + "/user_name")
    private MobileElement username;

其中 PACKAGE 被声明为常量。

现在,如果我想 运行 构建 B 上的脚本,我必须在每次触发执行之前更改包名称。这效率不高。

我知道我们不能给 pagefactory 注释添加变量。

我看到的唯一解决方法是使用 https://developer.android.com/reference/android/support/test/uiautomator/UiSelector.html#resourceidmatches

是否有任何其他解决方法,我可以在编译时添加包名称以绕过手动更改包名称。

你不需要包名,因为 Appium 可以在 resource id 中找到没有包名的元素,所以你可以在 ":id/" 之后使用 value 。当我为 QA build 和 Prod build 更改包名称时,我遇到了这个问题。所以试试下面的代码:

@AndroidFindBy(id = "user_name")
private MobileElement username;

现在它独立于包名称,如果 id 在所有构建中都是 user_name,则在任何构建中都可以是 运行。