Angularjs 如何解决webdriver中的竞争条件

Angularjs 如何解决webdriver中的竞争条件,angularjs,selenium,webdriver,protractor,Angularjs,Selenium,Webdriver,Protractor,我有一个混合使用angular和asp.net的应用程序。我的问题是通过设置window.location重定向主页,然后从服务器请求所需的数据和页面 以前情况并非如此,所有布线都是通过angular应用程序完成的。但是,由于需求,应用程序路由必须更改为现在的路由 现在,由于应用程序需要服务器端请求/响应(我相信),这会在我的测试中造成竞争条件,因为我每5次测试中只收到一次预期结果 目前我无法提供代码来解释我的情况。不过,我将在今天晚些时候的编辑中提供一些代码 我现在能提供的唯一代码是正在运行的

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

以前情况并非如此,所有布线都是通过angular应用程序完成的。但是,由于需求,应用程序路由必须更改为现在的路由

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

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


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

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


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

下面是我们如何在项目中等待元素的示例(应用程序也是angularjs,我们使用Java for webdriver):

在我们的Webdriver实现中,我们添加了:

private WebDriverWait iWait(int timeoutInSeconds) {
    return new WebDriverWait(webDriver, timeoutInSeconds);
}
我们希望等待元素可见(“可见性意味着该元素不仅显示,而且高度和宽度都大于0”):

ExpectedConditions类提供了许多其他现成的条件,下面是一些:

  • 可选择的元素
  • TextToBePresentElement
  • 标题内容
  • 元素选择状态为
欲了解更多信息,请查看

如果需要创建自己的条件,可以使用exoctedCondition(no's')类

在有机会发布代码后,为什么不给出答案?
public void waitForElementToAppear(By by, int timeoutInSeconds) {
    iWait(timeoutInSeconds).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.visibilityOfElementLocated(by));
}