在量角器中,全局可用的browser
对象有两种方法:
从AngularJS返回当前绝对URL。
安排命令检索当前页面的URL。
目前尚不清楚和明显两者之间有什么区别。到目前为止,我一直在使用getCurrentUrl()
。
我们应该何时使用getLocationAbsUrl()
?它包含哪些用例?
在其他selenium语言绑定中,我无法回想起与getLocationAbsUrl()
类似的任何内容。它看起来非常类似于量角器。
答案 0 :(得分:16)
webdriver.WebDriver.prototype.getCurrentUrl = function() {
return this.schedule(
new webdriver.Command(webdriver.CommandName.GET_CURRENT_URL),
'WebDriver.getCurrentUrl()');
};
使用schedule()
- > command()
封包来解决来自WebDriver.getCurrentUrl()
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 库加载
当前网址与绝对网址
给定的应用网址:
http://www.example.com/home/index.html#/Home
当前网址解析为更多URI
/home/index.html#/Home
绝对网址解析为
http://www.example.com/home/index.html#/Home
您何时要使用绝对网址:您希望使用完整域网址而不是本地导航(URI),您需要绝对网址。
如果您的应用程序调用当前URL ,则您的测试应调用getCurrentUrl()
。
如果您的代码请求绝对网址,您的测试应该调用getLocationAbsUrl()
。
答案 1 :(得分:2)
基本上他们应该做同样的事情,返回页面的URL。
从这个错误报告:
https://github.com/angular/protractor/issues/132
Selenium 的IEDriver
似乎总是返回第一个加载的页面,而不是当前加载的页面。因此,量角器团队实施了对Angular的$location
的JS调用,以便始终通过 Javascript 正确返回 URL ,而不是 Webdriver 协议。
答案 2 :(得分:2)
如前所述
getLocationAbsUrl - 返回当前位置的完整路径。
browser.get('http://angular.github.io/protractor/#/api');
expect(browser.getLocationAbsUrl())
.toBe('http://angular.github.io/protractor/#/api');
getCurrentUrl在promise(schedule)中用于检索当前页面的URL。通常,您只在调度时使用getCurrentUrl。
webdriver.WebDriver.prototype.getCurrentUrl = function()
{
return this.schedule(new webdriver.Command(webdriver.CommandName.GET_CURRENT_URL),'WebDriver.getCurrentUrl()');
}
答案 3 :(得分:1)
请注意,getLocationAbsUrl()
现已弃用,不应再使用了。
您应该使用getCurrentUrl()
代替。
以下是Protractor的相关Github commit。