2013-08-27 6 views
12

Я пытаюсь получить тест e2e, работающий против моего локального сервера, и проверить, что полученный URL-адрес (после нажатия кнопки навигации) является правильным результатом. Однако полученный URL всегда ложный.protractor ожидать 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> 

КОД ТЕСТ:

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

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

Вы также можете написать custom expected condition в wait для текущего URL, чтобы быть равным требуемой одной. Кроме того, используйте browser и element обозначения:

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