我正在使用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类为等待元素提供了一组预定义的条件,如下所示:
- elementSelectionStateToBe:一个元素状态就是选择
- elementToBeClickable:一个元素存在并且可以点击
- elementToBeSelected:已选择元素
- frameToBeAvailableAndSwitchToIt:框架可用,框架
- 选定。invisibility OfElementLocated:元素不可见
- presenceOfAllElementsLocatedBy:显示由定位的元素
- 刷新:在页面刷新时等待特定条件
- textToBePresentInElement:存在于特定元素上的文本
- textToBePresentInElementValue:和
的元素值特定元素。还有更多您可以通过以下网址了解更多实现隐式和显式等待的方法:http://roadtoautomation.blogspot.in/2013/10/webdriver-implicit-and-explicit-wait.html
希望它能帮助。。。