2015-06-17 4 views
1

Я думал, что Done заставит все работать синхронно, а это означает, что после того, как я нажму ссылку, щелчок по вызову произойдет после щелчка, видимо, не так, как это не работает.Транспортир, сделанный и ожидающий, зачем нам ждать?

browser.ignoreSynchronization = true; 
var firstURL = "https://www.google.com/?gws_rd=ssl"; 
describe("test", function() { 
browser.get("http://www.google.com"); 
it("Should be on google url", function() { 
    expect(browser.getCurrentUrl()).toBe(firstURL); 
}); 
it("Should be able to type in text and click", function (done) { 
    var ele = element.all(by.name("q")).first(); 
    ele.sendKeys("Protractor API"); 
    ele.click().then(function() { 
     expect(true).toBe(true); 
     done(); 
    }); 
}); 
it("Should be on new page", function (done) { 
    browser.driver.getCurrentUrl().then(function (url) { 
     debugger; 
     done(); 
    }); 
}); 
}); 

GetCurrentUrl() внизу кода возвращает URL-адрес первой страницы. Как получить текущий URL-адрес, когда вижу, что он изменился в браузере из теста?

ответ

3

Вы предполагаете, что обещание click будет устранено после изменения URL-адреса, но поскольку вы тестируете не угловую страницу, и вы отключили синхронизацию, она сразу же устраняется. Вы должны ждать URL, чтобы изменить себя:

var urlChanged = function(expectedUrl) { 
    return function() { 
     return browser.getCurrentUrl().then(function(url) { 
      return url.indexOf(expectedUrl) > -1; 
     }); 
    }; 
}; 

затем в тесте:

ele.click().then(function() { 
    browser.wait(urlChanged('google'), 5000); 
    done(); 
}); 
Смежные вопросы