我有一个使用angular和asp.net混合的应用程序。我的问题是通过设置window.location重定向主页,然后从服务器请求所需的数据和页面。
以前情况并非如此,所有路由都是通过角度应用程序完成的。但是由于要求,应用程序路由必须更改为现在的状态。
现在因为应用程序需要服务器端请求/响应(我相信)这导致我的测试中出现竞争条件,因为我每5次测试只收到一次预期结果。
目前我无法提供代码来解释我的情况。但是,我将在今天稍后的编辑中提供一些代码。
我现在唯一能提供的代码就是正在运行的测试。虽然我不相信如果没有运行应用程序的代码,这将有所帮助。
答案 0 :(得分:0)
最近的框架具有此功能,它将浏览器的document.readState设置为完成,然后加载内容。因此,测试可能会失败,因为我们期望元素存在。
对于这样的条件,您必须使用显式等待在您加载或更改页面后要为其执行操作的元素。
答案 1 :(得分:0)
以下是我们如何等待项目中的元素的示例(应用程序也是angularjs,我们使用Java作为webdriver):
在我们的Webdriver实现中,我们添加了:
private WebDriverWait iWait(int timeoutInSeconds) {
return new WebDriverWait(webDriver, timeoutInSeconds);
}
我们希望等待元素可见(“可见性意味着不仅显示元素,而且高度和宽度也大于0”):
public void waitForElementToAppear(By by, int timeoutInSeconds) {
iWait(timeoutInSeconds).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.visibilityOfElementLocated(by));
}
ExpectedConditions类提供了许多其他开箱即用的条件,这里有一些:
了解更多信息,请查看ExpectedConditions Javadoc
如果您需要创建自己的条件,可以使用ExoectedCondition(no's')类 ExpectedCondition Javadoc