Appiumを使用して、既にインストールされているアプリを起動しています。
ドライバーが初期化された後。特定のアクティビティが表示されるまでポーリング待機させるにはどうすればよいですか?
起動時にアクティビティを待つのはこの方法だけでした
cap.setCapability("app-wait-activity", "activity-to-wait-for");
他の方法はありますか?初期化しないときに別の特定のアクティビティを待つ方法ボタンをクリックした後に言いますか?
ただsleep x seconds
?
特定のアクティビティとは、特定の要素が表示されていることを意味します。次のコードを使用して、画面上の特定の要素まで待機します。
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')]")));
次のコードを使用して、現在のアクティビティを毎秒ポーリングできます。ポーリング時間を短縮したい場合は、スリープ時間を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);
}
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < Time_Out)
if (getDriver().currentActivity().equals(activity))
break;
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me")));
Appiumで暗黙的および明示的な待機をどのように使用できるかについて詳しく知りたい場合は、こちらをご覧ください [〜#〜] tutorial [〜#〜]
要素を使用してさまざまな方法で実行できます。 Webdriverは、これを実装するための「WebDriverWait」、「ExpectedCondition」クラスを提供します。 ExpectedConditionsクラスは、要素を待機するための事前定義条件のセットを提供します。
それが役に立てば幸い...
また、次のものを利用することもできます。
getDriver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
あるいは単に:
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
または次のようなもの:
Thread.sleep(5000);
WebDriverWaitを使用することをお勧めします。 Thread.sleep()は、テストスクリプトで使用する良い方法ではありません。