0

メイン アクティビティ セクションでヘッダー クラス/ウィジェットの 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 を検索させることですが、クラスを管理するための実践的な観点からは、これを行いたくありません。

スクリーンショット: バージョン 1: ヘッダー セクション バージョン 2: ここに画像の説明を入力

4

1 に答える 1

0

複数の条件を使用するための代替手段が見つかりました。複数の条件を使用したロケーター戦略の使用についてさらに調査したところ、className と id/resource-id で xpath ロケーターを使用できることがわかりました。ただし、className タグが同じままであり、resource-id が変更されているかどうかによって異なります。現時点で、私の状況はそれらの条件を満たしています。

@AndroidFindBy(xpath="//android.widget.TextView[@resource-id='com.reddit.frontpage:id/search_view' or @resource-id='com.reddit.frontpage:id/toolbar_title']")
public MobileElement navTitle;
于 2019-10-15T06:49:23.300 に答える