量角器-使用动态填充的输入测试Angular表单

心智分析

我正在尝试为我的角度应用程序编写e2e测试,尤其是要有3个select输入的表单。该测试将需要涉及从这些选择中选择随机选项。第一个选择已经填充了数据,但是其他两个选择已被选择时则异步填充,因此它们彼此依赖。

选择输入还使用ng-disabled,并且仅当根据其ng-repeat表达式有可用选项时才启用。

我在测试中使用页面对象方法,因此尝试制作一些实用程序功能来实现我在测试中所需的随机选择行为:

页面对象:

    this.selectRandomCustomer = function() {
    var option,
      randomIndex;
    this.customerSelect.click();
    this.customerSelectOptions.count().then(function(count) {
      randomIndex = Math.floor(Math.random() * count);
      option = element(by.repeater('customer in vm.customers').row(randomIndex));
      option.click();
    });
  };

  this.selectRandomOrder = function() {
    if(this.orderSelect.isEnabled()===true) {
      var option,
        randomIndex;
      this.orderSelect.click();
      this.orderSelectOptions.count().then(function(count) {
        randomIndex = Math.floor(Math.random() * count);
        option = element(by.repeater('order in vm.orders').row(randomIndex));
        option.click();
      });
    }
  };

鉴于orderSelect只能从中选择一个选项后才用选项填充一次customerSelect,我想知道是否要挂接到调用时返回的Promise this.customerSelectOptions.count(),所以调用this.selectRandomOrder,但这似乎是未定义的,因为我从量角器得到一个错误,说它找不到selectRandomOrder功能。

现在,我只能选择一个选项,因为它总是在初始页面加载时填充。

另外,我不确定usingisEnabled()是否真的对我有用,因为我确定第二个输入应该返回true,但是如果我注销此命令,则会看到false。这不起作用ng-disabled吗?

处理在表单上最初不会填充数据并等待angular获取和填充任何可用选项的输入的最佳实践是什么?

谢谢

更新:

我已经通过调用来getAttribute()检查该disabled属性的存在来进行工作。

所以从我的规范文件中it我可以调用

page.customerSelect.getAttribute('disabled').then(function(result){
    if(!result) {
        page.selectRandomCustomer();
    }
});

page.orderSelect.getAttribute('disabled').then(function(result){
    if(!result) {
        page.selectRandomOrder();
    }
});

理想情况下,我想要执行的操作是在selectRandomCustomer中单击选项后调用selectRandomOrder:

this.selectRandomCustomer = function() {
    var option,
        randomIndex;
    this.customerSelect.click();
    this.customerSelectOptions.count().then(function(count) {
        randomIndex = Math.floor(Math.random() * count);
        option = element(by.repeater('customer in vm.customer').row(randomIndex));
        option.click();
        //Like to be able to call selectRandomOrder but only after angular has finished performing AJAX request for data and received response
    });
};

this.selectRandomOrder = function() {
    var option,
        randomIndex;
    this.orderSelect.click();
    this.orderSelectOptions.count().then(function(count) {
        randomIndex = Math.floor(Math.random() * count);
        option = element(by.repeater('order in vm.orders').row(randomIndex));
        option.click();
    });
};

我确实尝试this.selectRandomOrder在之后立即调用option.click()但收到错误消息,提示没有此类函数,似乎this无法从返回的promise函数回调内部进行访问。

ec

发布的代码中至少存在一个主要问题:

if(this.orderSelect.isEnabled()===true) {

在这里isEnabled() 返回一个承诺您必须解决它以检查它的值:

var self = this;  // saving the page object reference
this.orderSelect.isEnabled().then(function (isEnabled) {
    if (isEnabled) {
        var option,
            randomIndex;
        self.orderSelect.click();
        self.orderSelectOptions.count().then(function(count) {
            randomIndex = Math.floor(Math.random() * count);
            option = element(by.repeater('order in vm.orders').row(randomIndex));
            option.click();
        });
    }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章