GetLocationAbsUrl vs getCurrentUrl
В транспортимере глобально доступный объект browser
имеет два метода:
Возвращает текущий абсолютный URL-адрес от AngularJS.
Задает команду для получения URL-адреса текущей страницы.
Не совсем ясно и очевидно, в чем разница между ними. К этому моменту я использовал только getCurrentUrl()
.
Когда мы должны использовать getLocationAbsUrl()
? Какие варианты использования он охватывает?
Я не могу вспомнить ничего похожего на getLocationAbsUrl()
в других привязках языка селена. Он выглядит довольно часто, особенно для транспортира.
Ответы
Ответ 1
Источник GitHub для getCurrentUrl
webdriver.WebDriver.prototype.getCurrentUrl = function() {
return this.schedule(
new webdriver.Command(webdriver.CommandName.GET_CURRENT_URL),
'WebDriver.getCurrentUrl()');
};
Использует обертки schedule()
→ command()
для разрешения обещания от WebDriver.getCurrentUrl()
Источник GitHub для Protractor.getLocationAbsUrl
functions.getLocationAbsUrl = function(selector) {
var el = document.querySelector(selector);
if (angular.getTestability) {
return angular.getTestability(el).
getLocation();
}
return angular.element(el).injector().get('$location').absUrl();
};
Просто обертка вокруг $location.absUrl()
с ожиданием библиотеки AngularJS для загрузки
Текущий URL-адрес против Абсолютного URL
данный URL приложения:
http://www.example.com/home/index.html#/Home
Текущий URL-адрес разрешает больше URI
/home/index.html#/Home
Абсолютный URL-адрес разрешает
http://www.example.com/home/index.html#/Home
Когда вы хотите использовать абсолютный URL-адрес:. Вы хотите использовать URL полного домена, а не локальную навигацию (URI), вам нужен Абсолютный URL-адрес.
-
Если ваше приложение вызывает вызовы для текущего URL-адреса, ваши тесты должны вызывать getCurrentUrl()
.
-
Если ваш код запрашивает Абсолютный URL, ваши тесты должны вызывать getLocationAbsUrl()
.
Ответ 2
В основном они должны делать то же самое, вернуть URL-адрес страницы.
Из этого отчета об ошибке:
https://github.com/angular/protractor/issues/132
кажется, что IEDriver
для Selenium всегда возвращал первую загруженную страницу, а не текущую. Таким образом, команда транспортира реализовала вызов JS Angular $location
, чтобы всегда правильно возвращать URL с помощью Javascript, а не Webdriver.
Ответ 3
Как указано ранее
getLocationAbsUrl - возвращает полный путь к текущему местоположению.
browser.get('http://angular.github.io/protractor/#/api');
expect(browser.getLocationAbsUrl())
.toBe('http://angular.github.io/protractor/#/api');
GetCurrentUrl используется в обещании (расписание) для получения URL-адреса текущей страницы. Как правило, вы должны использовать getCurrentUrl при планировании.
webdriver.WebDriver.prototype.getCurrentUrl = function()
{
return this.schedule(new webdriver.Command(webdriver.CommandName.GET_CURRENT_URL),'WebDriver.getCurrentUrl()');
}
Ответ 4
Обратите внимание, что getLocationAbsUrl()
теперь устарел и больше не должен использоваться.
Вы должны использовать getCurrentUrl()
.
Вот ссылка Github commit с помощью Protractor.