当前位置: 首页 > 知识库问答 >
问题:

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

邢星波
2023-03-14

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

选择输入还使用 ng 禁用,并且仅当有根据其 ng 重复表达式可用的选项时才启用。

我在测试中使用了页面对象方法,因此我尝试制作一些实用函数来实现测试中需要的随机选择行为:

页面对象:

    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();
      });
    }
  };

鉴于从customerSelect中选择一个选项后,只有用选项填充了订单Select才能被选中,我想了解一下调用this.customerSelectOptions时返回的promise。count(),因此调用this。selectRandomOrder,但这似乎是未定义的,因为我从量角器处得到一个错误,说它找不到selectRandomOrder函数。

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

此外,我不确定使用isEnabled()是否真的对我有效,因为我确信这应该会为我的第二个输入返回true,但如果我控制台注销它,我会看到false。禁用ng时这不起作用吗?

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

谢啦

更新:

我使用调用getAttribute()来检查是否存在禁用的属性,从而实现了这一点。

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

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

page.orderSelect.getAttribute('disabled').then(function(result){
    if(!result) {
        page.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();
    });
};

我确实尝试在选项.click()后立即调用此.selectRandomOrder,但我收到一个错误,说没有这样的函数,似乎无法从返回的promise函数回调内部访问


暂时还没有答案

 类似资料:
  • 问题内容: 在我们的项目中,我有几个JUnit测试,例如从目录中获取每个文件并对其进行测试。如果我在中实现了一种方法,那么它只会显示为可能失败或成功的一项测试。但是我对每个文件的结果都很感兴趣。如何编写一个/ 使得每个文件显示为单独的测试,例如在Eclipse的图形TestRunner中?(为每个文件编写显式测试方法不是一种选择。) 问题答案: 看看JUnit 4 中的 参数化测试 。 实际上,我

  • 问题内容: 我是Protractor的新手。尽管缺少文档,但我仍然了解基本原理,但找不到解决此问题的方法。 给出以下代码: 我可以看到输入获取了要插入的文本,并且模型以相同的值更新,但是测试失败,原因是description.getText()返回’‘(空字符串)。 有没有其他方法可以在输入中捕获值? 提前致谢。 问题答案: 显然,Selenium WebDriver有一个怪癖。看这里 尝试: 注

  • 问题内容: 是否可以像在单元测试中一样在量角器测试中访问angular? 用例是我有一个可以转换文本的服务,并且我想访问该服务以转换实际测试脚本中的某些数据。我知道量角器中有这种方法,但是我不知道如何为此目的使用它。 将不胜感激! 问题答案: 有一个函数称为validate()。在dom中找到一个元素,然后运行表达式。 例如。如果要计算http://angularjs.org/网站(在“添加某些控

  • 我需要滚动表来获取使用selenium和java绑定以及chrome驱动程序动态填充的表内容。这是另一个滚动,而不是窗口滚动本身。我能找到的所有可用的解决方案都是针对窗口滚动的。我在这里需要的是滚动桌子。我需要滚动突出显示的那个 我收到以下错误消息 错误消息:没有这样的元素:找不到元素:{“method”:“XPath”,“Selector”:“//*[@class='antiscroll-scr

  • 问题内容: 如何使量角器向下滚动到桌子上?我的表可以无限滚动- 加载20条记录,并且在显示倒数第二行时,它将获取接下来的20条记录。并非所有记录都在视图中…有些滚动到下面,而有些滚动到用户上方时。我以为测试是 这是正确的方法吗? HTML表格代码: 问题答案: 这个想法是在表(标签)中找到最新的元素,然后通过将父元素的元素设置为最后一个元素的元素来滚动到该元素。 该属性获取或设置元素内容向上滚动的

  • 我有一个基于XFA的pdf表单,我们需要使用java来填充它。你能建议最好的方法吗。我能够使用iText为pdf生成xfa xml。 我有从上面的代码生成的Pdf和Xfa XML。你能不能建议我如何继续下去,因为我似乎没有主意了。我试图检查XFA文档,但似乎不对。我没有xml,pdf非常复杂,因为它有许多字段,是一个动态XFA pdf表单。 您的帮助和建议将受到衷心的感谢。