2013-10-04 35 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