Подтвердить что ты не робот

GetLocationAbsUrl vs getCurrentUrl

В транспортимере глобально доступный объект browser имеет два метода:

Возвращает текущий абсолютный URL-адрес от AngularJS.

Задает команду для получения URL-адреса текущей страницы.

Не совсем ясно и очевидно, в чем разница между ними. К этому моменту я использовал только getCurrentUrl().

Когда мы должны использовать getLocationAbsUrl()? Какие варианты использования он охватывает?


Я не могу вспомнить ничего похожего на getLocationAbsUrl() в других привязках языка селена. Он выглядит довольно часто, особенно для транспортира.

4b9b3361

Ответ 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.