2013-08-27 28 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);