2013-08-27 37 views
12

我試圖讓我的本地服務器運行一個e2e測試,並測試生成的url(在導航按鈕被點擊後)是正確的結果。但是生成的url始終是false。量角器期望currenturl失敗

我的代碼如下所示:

HTML:

//http://localhost/#/current_Page 
<html> 
    <head><title></title></head> 
    <body> 
    //should change the current url to 
    //http://localhost/#/new_page 
    <button class="button" ng-click="change_page()">Change Page</button> 
</html> 

TEST CODE:

var protractor = require('protractor'); 
require('protractor/jasminewd'); 

describe('Tests', function() {  
    var ptor; 

    describe('Test 1', function() { 
     var ptor = protractor.getInstance(); 
     ptor.get('#/current_page'); 
     it('change page and current url', function() { 
      ptor.findElement(protractor.By.className('.button').click().then(function() { 
       expect(ptor.currentUrl()).toContain('#/new_page'); 
      }); 
     }); 
    }, 30000); 
}); 

的問題是點擊該按鈕後,當前URL仍然#/ current_url和不更改爲預期結果#/ new_page。

有誰知道我哪裏出了問題?

回答

10

搜索的回答這個問題後,我想通了自己

當前的URL不會失敗,我沒有等待承諾要恢復角。下面的ammended代碼顯示,我出了毛病

var protractor = require('protractor'); 
require('protractor/jasminewd'); 

describe('Tests', function() {  
var ptor; 

describe('Test 1', function() { 
    var ptor = protractor.getInstance(); 
    ptor.get('#/current_page'); 
     it('change page and current url', function() { 
      ptor.findElement(protractor.By.className('.button').click().then(function() { 
       ptor.waitForAngular(); 
       expect(ptor.currentUrl()).toContain('#/new_page'); 
      }); 
     }); 
    }, 30000); 
}); 

這然後等待角路由到新頁面和更新任何綁定,然後繼續檢查預期的結果是什麼現在我希望它是。

請注意,這並不能解決與意外的getCurrentUrl()結果有關的所有問題。如果使用driver.findElement()你可能需要參考JulieMR的答案this question

我希望這可以幫助有人在這個問題上停滯不前。

+6

在當前版本需要爲'ptor.getCurre ntUrl()'。其他任何事情都很好。 –

2

在量角器1.5.0 protractor.getInstance();不再工作,所以你必須改用browser

var protractor = require('protractor'); 
require('protractor/jasminewd'); 

describe('Tests', function() {  

describe('Test 1', function() { 
    browser.get('#/current_page'); 
     it('change page and current url', function() { 
      ptor.findElement(protractor.By.className('.button').click().then(function() { 
       browser.waitForAngular(); 
       expect(browser.getCurrentUrl()).toContain('#/new_page'); 
      }); 
     }); 
    }, 30000); 
}); 
0

你也可以寫爲當前的URL custom expected conditionwait到等於所希望的一個。此外,使用browserelement符號:

browser.get("#/current_page"); 

it("change page and current url", function() { 
    element(by.css(".button")).click(); 

    browser.wait(urlChanged("#/new_page")), 5000); 
}); 

其中urlChanged是:

var urlChanged = function(url) { 
    return function() { 
    return browser.getCurrentUrl().then(function(actualUrl) { 
     return actualUrl.indexOf(url) >= 0; 
    }); 
    }; 
}; 

或者,量角器> = 4.0.0溶液和urlContains預期條件:

element(by.css(".button")).click(); 

var EC = protractor.ExpectedConditions; 
browser.wait(EC.urlContains("#/new_page"), 5000);