0

我有一个混合使用 angular 和 asp.net 的应用程序。我的问题是通过设置 window.location 重定向主页,然后从服务器请求所需的数据和页面。

以前情况并非如此,所有路由都是通过 Angular 应用程序完成的。然而,由于要求,应用程序路由必须更改为现在的样子。

现在因为应用程序需要服务器端请求/响应(我相信),这导致我的测试出现竞争条件,因为我每 5 次测试只收到一次预期结果。

目前我无法提供代码来解释我的情况。但是,我将在今天晚些时候的编辑中提供一些代码。

我现在可以提供的唯一代码是正在运行的测试。尽管我不相信如果没有运行应用程序的代码,这会有所帮助。

4

2 回答 2

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 类提供了许多其他开箱即用的条件,这里有一些:

  • elementToBeClickable
  • textToBePresentInElement
  • 标题包含
  • elementSelectionStateToBe

有关更多信息,请查看ExpectedConditions Javadoc

如果需要创建自己的条件,可以使用 ExoectedCondition (no 's') class ExpectedCondition Javadoc

于 2013-11-18T09:22:07.237 回答
0

最近的框架具有此功能,它将浏览器的 document.readState 设置为完成,然后加载内容。因此,测试可能会失败,因为我们预计会出现一个元素。

对于这种情况,您必须使用显式等待元素出现,以便在页面加载或更改后对其执行操作。

于 2013-10-11T08:29:06.067 回答