如何在开始和测试期间使用 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 测试
如何列出可以添加到 C# Appium 框架中的设备和 ios 以使其每次测试都使用不同的 Ios 设备和 Ios OS