如何在开始和测试期间使用 Appium "wait to activity"?



我正在使用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')]")));
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me"))); 

如果您想详细了解如何在Appium中使用隐式和显式等待,请访问此TUTORIAL

您可以使用以下代码每秒轮询当前活动。如果你想减少轮询时间,你可以将睡眠时间减少到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);
}

我建议您使用WebDriverWait。Thread.sleep()不是在测试脚本中使用的好方法

long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < Time_Out)
    if (getDriver().currentActivity().equals(activity))
        break;

您还可以使用以下功能:

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

或者只是:

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

或者类似以下内容:

Thread.sleep(5000);

使用元素可以通过不同的方式完成。Webdriver提供了"WebDriverWait"、"ExpectedCondition"类来实现这一点。ExpectedConditions类为等待元素提供了一组预定义的条件,如下所示:

  1. elementSelectionStateToBe:一个元素状态就是选择
  2. elementToBeClickable:一个元素存在并且可以点击
  3. elementToBeSelected:已选择元素
  4. frameToBeAvailableAndSwitchToIt:框架可用,框架
  5. 选定。invisibility OfElementLocated:元素不可见
  6. presenceOfAllElementsLocatedBy:显示由定位的元素
  7. 刷新:在页面刷新时等待特定条件
  8. textToBePresentInElement:存在于特定元素上的文本
  9. textToBePresentInElementValue:和
    的元素值特定元素。还有更多您可以通过以下网址了解更多实现隐式和显式等待的方法:http://roadtoautomation.blogspot.in/2013/10/webdriver-implicit-and-explicit-wait.html

希望它能帮助。。。

最新更新