如何在开始和测试期间使用 Appium“等待活动”?

Posted

技术标签:

【中文标题】如何在开始和测试期间使用 Appium“等待活动”?【英文标题】:How to "wait to activity" using Appium, on begin and during test itself? 【发布时间】:2015-05-02 04:37:30 【问题描述】:

我正在使用 appium 启动一个已经安装的应用程序。

在我的驱动程序初始化之后。如何让它轮询等待直到显示某些活动?

我只看到这种方式启动时等待活动

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

还有其他方法吗?未初始化时如何等待另一个特定活动。点击按钮后说?

只是sleep x seconds

【问题讨论】:

【参考方案1】:

特定活动表示正在显示某些特定元素。 我使用以下代码等到屏幕上的某个特定元素:

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')]")));

【讨论】:

【参考方案2】:
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me"))); 

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < Time_Out)
    if (getDriver().currentActivity().equals(activity))
        break;

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

您还可以使用以下内容:

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

或者只是:

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

或类似以下内容:

Thread.sleep(5000);

【讨论】:

强烈建议避免睡眠,因为这会使您的测试等待 5 秒,即使它不需要。这可以快速加起来并使您的测试非常慢,而使用显式等待可以使您的测试更稳定和更快!【参考方案7】:

可以通过不同的方式使用元素来完成。 Webdriver 提供“WebDriverWait”、“ExpectedCondition”类来实现这一点。 ExpectedConditions 类提供了一些预定义条件来等待元素:

    elementSelectionStateToBe:元素状态为选择。 elementToBeClickable:元素存在且可点击。 elementToBeSelected:元素被选中 frameToBeAvailableAndSwitchToIt:框架可用且框架 已选中。 invisibilityOfElementLocated:一个元素是不可见的 presenceOfAllElementsLocatedBy:当前元素所在的位置。 刷新:页面刷新时等待特定条件。 textToBePresentInElement:文本出现在特定元素上 textToBePresentInElementValue: 和元素值存在于 a 特定元素。还有很多 您可以通过以下网址了解更多实现隐式和显式等待的方法: http://roadtoautomation.blogspot.in/2013/10/webdriver-implicit-and-explicit-wait.html

希望对你有帮助...

【讨论】:

以上是关于如何在开始和测试期间使用 Appium“等待活动”?的主要内容,如果未能解决你的问题,请参考以下文章

Appium:如何在开始测试运行 appium-testng 之前使用 java 在 aws 设备场设备上以编程方式创建 google 帐户

如何在 iOS 模拟器上启动 appium 测试?

如何在 iOS 模拟器上使用某种语言键盘启动 Appium 测试

如何列出可以添加到 C# Appium 框架中的设备和 ios 以使其每次测试都使用不同的 Ios 设备和 Ios OS

如何使用 Selenium+Appium 和 java 测试随机值

在移动原生应用程序测试中:使用 Appium 时如何模拟后端?