量角器期望currenturl失败

时间:2013-08-27 13:41:13

标签: angularjs angularjs-e2e protractor

我正在尝试针对我的本地服务器运行e2e测试并测试生成的url(在单击导航按钮之后)是正确的结果。但是,生成的url始终为false。

我的代码如下所示:

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>

测试代码:

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);
});

问题是点击按钮后的当前网址仍为#/ current_url,并且未更改为预期结果#/ new_page。

有谁知道我哪里出错了?

3 个答案:

答案 0 :(得分:10)

在搜索到这个问题的答案后,我自己想出来了

当前网址没有失败,我没有等待承诺返回角度。下面修改后的代码显示了我出错的地方

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);
});

然后等待angular路由到新页面并更新任何绑定,然后继续检查预期的结果,这正是我期望的结果。

请注意,这并未解决与意外getCurrentUrl()结果相关的所有问题。如果使用driver.findElement(),您可能需要参考JulieMR对this question

的回答

我希望这有助于有人坚持这个问题。

答案 1 :(得分:2)

在Protractor 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);
});

答案 2 :(得分:0)

您还可以将 custom expected condition写入wait,以使当前网址与所需网址相等。此外,请使用elementbrowser.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; }); }; }; 是:

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

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

或者,一个量角器&gt; = 4.0.0解决方案和urlContains预期条件:

cabal sandbox init
cabal init