メイン アクティビティ セクションでヘッダー クラス/ウィジェットの POM クラスを作成しています (Reddit アプリがその例です。以下のスクリーンショットを参照してください)。メイン アクティビティの別のセクション/タブでは、検索ボックスが使用できなくなります。id/resource-id も変更され、:id/search_view または :id/toolbar_title で終わります。この質問に対する私の最初の反応は「いいえ」ですが、この特定の主題に遭遇したことがある人には、やめると言う前に連絡を取りたいと思っています。
ResourceIdMatches メソッドを呼び出すときに、UiSelector 内の正規表現条件を使用して、Header クラスの単一の MobileElement にいずれかの Id を格納できるかどうかを確認したかったのです。
これが、現在 My Header クラスにあるものです。(焦点は navTitle MobileElement にあります):
@AndroidFindBy(id="com.reddit.frontpage:id/toolbar")
public MobileElement headerSection;
@AndroidFindBy(id = "com.reddit.frontpage:id/nav_icon")
public MobileElement userIcon;
//Needs work
@AndroidFindBy(uiAutomator = "new UiSelector()"
+ ".resourceIdMatches(\".*id/^([search_view|toolbar_title])+$\")")
public MobileElement navTitle;
public RedditMainActivityHeader(AppiumDriver<MobileElement> driver) {
super(driver);
}
正規表現のトピックについて調査しているときに、[] を使用せず、+ の代わりに * を使用して、単語境界 (\b) を使用する前に正規表現条件を編集しました。これを回避する別の方法は、2 番目のヘッダー クラスを作成し、navTitle に :id/search_view または :id/toolbar_title のいずれかで ID を検索させることですが、クラスを管理するための実践的な観点からは、これを行いたくありません。