web-dev-qa-db-ja.com

開始時およびテスト中に、Appiumを使用して「アクティビティを待つ」方法は?

Appiumを使用して、既にインストールされているアプリを起動しています。

ドライバーが初期化された後。特定のアクティビティが表示されるまでポーリング待機させるにはどうすればよいですか?

起動時にアクティビティを待つのはこの方法だけでした

cap.setCapability("app-wait-activity", "activity-to-wait-for");

他の方法はありますか?初期化しないときに別の特定のアクティビティを待つ方法ボタンをクリックした後に言いますか?

ただsleep x seconds

12
Elad Benda2

特定のアクティビティとは、特定の要素が表示されていることを意味します。次のコードを使用して、画面上の特定の要素まで待機します。

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By
        .xpath("//Android.widget.Button[contains(@text, 'Log In')]")));

または:

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(By
            .xpath("//Android.widget.TextView[contains(@resource-id, 'action_bar_title')]")));
11
Alex

次のコードを使用して、現在のアクティビティを毎秒ポーリングできます。ポーリング時間を短縮したい場合は、スリープ時間を500に減らし、wait*2

public void waitForActivity(String desiredActivity, int wait) throws InterruptedException
{
    int counter = 0;
    do {
        Thread.sleep(1000);
        counter++;
    } while(driver.currentActivity().contains(desiredActivity) && (counter<=wait));

    log("Activity appeared :" + driver.currentActivity(), true);
}
2
shiv
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < Time_Out)
    if (getDriver().currentActivity().equals(activity))
        break;
1
sameeksha sahib
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me"))); 

Appiumで暗黙的および明示的な待機をどのように使用できるかについて詳しく知りたい場合は、こちらをご覧ください [〜#〜] tutorial [〜#〜]

1
anuja jain

要素を使用してさまざまな方法で実行できます。 Webdriverは、これを実装するための「WebDriverWait」、「ExpectedCondition」クラスを提供します。 ExpectedConditionsクラスは、要素を待機するための事前定義条件のセットを提供します。

  1. elementSelectionStateToBe:要素の状態は選択です。
  2. elementToBeClickable:要素が存在し、クリック可能です。
  3. elementToBeSelected:要素が選択されています
  4. frameToBeAvailableAndSwitchToIt:フレームは利用可能で、フレーム
  5. 選択されました。 invisibilityOfElementLocated:要素は不可視です
  6. presenceOfAllElementsLocatedBy:現在の要素の位置。
  7. 更新:ページの更新時に特定の条件を待ちます。
  8. textToBePresentInElement:特定の要素に存在するテキスト
  9. textToBePresentInElementValue:および
    特定の要素。さらに多くの場合、次のURLを参照して、暗黙的および明示的な待機を実装する方法を学習できます。 http://roadtoautomation.blogspot.in/2013/10/webdriver-implicit-and-explicit-wait.html

それが役に立てば幸い...

1

また、次のものを利用することもできます。

getDriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

あるいは単に:

driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

または次のようなもの:

Thread.sleep(5000);
1
Alex

WebDriverWaitを使用することをお勧めします。 Thread.sleep()は、テストスクリプトで使用する良い方法ではありません。

1
Gaurav