【问题标题】:How to validate when a checkbox is checked in AngularJS e2e tests?如何验证在 AngularJS e2e 测试中选中复选框的时间?
【发布时间】:2016-03-08 03:52:12
【问题描述】:

我一直在尝试AngularJS e2e tests,但在确定是否选中复选框时遇到了困难。

我使用checkbox input 的端到端测试作为示例(请参阅示例中的端到端测试标签)。

HTML sn-p:

Value1: <input type="checkbox" ng-model="value1"> <br/>

控制器 sn-p:

function Ctrl($scope) {
  $scope.value1 = true;
}

这是我尝试过的:

1) expect(binding('value1')).toEqual('true');

只要value1{{value1}} 一起显示在屏幕上,这在示例端到端测试中有效。如果您在本地对此进行测试并删除 `{{value1}},则绑定测试将失败。在我的大多数真实示例中,我没有在屏幕上的任何地方显示复选框值。

2)expect(input('value1').val()).toEqual('true');

该值将始终默认为on,与复选框是否处于选中状态无关(取自this post)。


注意: Angular E2E 测试似乎将来会被Protractor 取代(参见the docs

【问题讨论】:

    标签: angularjs angularjs-e2e


    【解决方案1】:

    对于使用 Protractor 的任何人,有 webdriver isSelected() 正是为此。

    您可以这样做,而不是要求checked 属性:

    expect(element(by.model('value1')).isSelected()).toBeTruthy();
    

    【讨论】:

    • 当我尝试这段代码得到异常:“无效的元素状态:元素当前不可交互并且可能无法被操纵”。知道如何解决这个问题
    • 回到我的量角器时代,我用waitReady.js 脚本解决了陈旧元素问题,请参阅:stackoverflow.com/questions/35533139/…
    【解决方案2】:

    我赞成这个问题,因为我有同样的问题。 我在测试中使用了以下解决方法,但我希望看到更好的方法。

    expect( element('input[ng-model="value1"]').attr('checked') ).toBeTruthy();
    

    【讨论】:

    • 谢谢!我比我现在正在做的更喜欢这个。我会保持这个问题有点开放,以防万一有更好的方法:)
    • 在因果报应中,应该使用的不是attr,而是prop。对于谷歌同事。
    • 这个答案对我不起作用。 Leo Gallucci 的答案很有效。
    【解决方案3】:

    我希望有更好的方法,但我通过验证与模型绑定匹配的已检查输入元素的计数来解决这个问题:

    expect(element('input[ng-model="value1"]:checked').count()).toBe(1);

    在检查是否未检查某些内容时,至少有一个缺点是该元素是否不存在或是否存在拼写错误,如本例所示,该值仍为 0:

    expect(element('input[ng-model="valueDoesNotExist"]:checked').count()).toBe(0);

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2018-09-28
      • 2016-06-24
      • 2013-11-05
      相关资源
      最近更新 更多