2013-10-04 33 views
0

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

此前并非如此,所有路由都是通过角度应用完成的。但是由于需求,应用程序路由必须改变为现在的状态。

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

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

我现在可以提供的唯一代码就是正在运行的测试。虽然我不相信这将有助于没有运行应用程序的代码。

+1

为什么在你有机会发布你的代码之后,你不能回答你的答案? – MikroDel

回答

0

最近的框架具有此功能,它设置浏览器的document.readState以完成并且之后加载内容。由于这个原因,测试可能会失败,因为我们会期待一个元素出现。

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

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
  • titleContains
  • elementSelectionStateToBe

的更多信息,请看看ExpectedConditions Javadoc

如果你需要创建你的o wn条件下,你可以使用ExoectedCondition(no's)类 ExpectedCondition Javadoc