我可以在量角器测试中访问ng-app值吗?

时间:2017-01-28 00:28:13

标签: angularjs protractor angularjs-e2e e2e-testing

我简化了我需要测试的代码:

<html ng-app="home" ng-strict-di=""><head>....

我正在运行一些量角器测试,我想访问ng-app的值,这样我就可以比较并查看每个页面中正在运行的应用程序。

我试过了

var appName = element(by.xpath('/html/@ng-app'))

但它没有返回可用的承诺或文本,我可以与

进行比较
appName.getText().then(function(name) {
      expect(name).toBe('home')
      });

但是量角器抱怨道:

InvalidSelectorError: invalid selector: The result of the xpath expression "/html/@ng-app" is: [object Attr]. It should be an element.

所以我有点困惑,因为我如何从量角器访问我的角度应用程序名称,以测试独立于标签本地化运行的应用程序。

对这个谜团的任何见解?

2 个答案:

答案 0 :(得分:2)

似乎神奇地说,当你命令你的想法来提出问题时,答案就会出现在你身上。

诀窍是将html作为元素

var appNameHtml = element(by.xpath('/html'))

然后,在测试中,获取ng-app属性并使用它:

appNameHtml.getAttribute('ng-app').then(function(value) {
    expect(value).toBe('home');
});

宾果游戏,您可以提取应用名称。

也许这是一个非常基本的问题,但这让我感到疯狂:)

答案 1 :(得分:2)

在这种情况下,我的答案就足够了。但只是想强调更通用的方法,以防ng-app不仅可能驻留在html元素上。

var elementWithNgApp = element(by.css('*[ng-app]'))

然后又想补充一点。您无需解决getAttribute对其价值有所期望的承诺。 Jasmine解决了对你的承诺。你可以有这样的东西

expect(elementWithNgApp.getAttribute('ng-app')).toBe('home');