【问题标题】:Functional testing conditionals with Intern/Leadfoot使用 Intern/Leadfoot 进行功能测试条件
【发布时间】:2014-09-04 08:16:17
【问题描述】:

我希望根据之前的断言是否成功,有条件地执行一些命令/断言。

我似乎找不到嵌套then 调用或使用leadfoot 的链接语法有条件地执行事物的方法。

这是我的测试(每个函数末尾的返回是由于正在编译的咖啡脚本):

tdd.test(tableUrl, function() {
    this.timeout = 60000;
    return this.remote.get(require.toUrl("tests/pages/" + tableUrl))
    .setPageLoadTimeout(60000)
    .setFindTimeout(20000)
    .findByCssSelector('.dataTables_wrapper table.dataTable')
    .then(null, function(err) {
      return assert.fail('', '', 'Table should exist');
    }).then(pollUntil(function() {
      var table;
      table = document.querySelector('.dataTables_wrapper table.dataTable');
      if (table.querySelectorAll('tbody td').length > 1) {
        return true;
      } else {
        return null;
      }
    }, null, 20000, 500)).then(function() {
      console.log('Assertion succeeded: Table should have data');
      return assert.ok(true, 'Table should have data');
    }, function(err) {
      return assert.fail('', '', 'Table should have data');
    });
  });

当一个表不存在时,“表应该存在”和“表应该有数据”断言都应该报告为失败。但是,只有最后一个断言失败。当我注释掉“表应该有数据”错误回调时,“表应该存在”断言被报告为正确失败。

我想做的是

  1. 测试 table 是否存在(通过 findByCssSelector)。

    a) 如果存在,报告它存在并测试它是否有多个td 元素。这目前是通过pollUntil 完成的,以确保命令完成/一旦找到多个td 就解决承诺,而不是等待整个隐式等待时间。

    b) 如果不存在,则报告不存在。

如果第一个 findByCssSelector 失败,我似乎找不到执行第二个“表应该有数据”轮询的错误回调的方法,因为缺少条件并且仅测试中报告的最后一个断言失败。

【问题讨论】:

    标签: selenium intern


    【解决方案1】:

    所以条件分支可以发生在then 调用中,this answer 解决了如何使用实习生进行条件分支。

    我遇到的问题是由于function returning a callback function that returns a promise rather than a promise directlypollUntil 函数的行为方式与普通的 leadfoot Command 方法不同。

    这可以通过将pollUntil 包装在一个匿名函数中来规避,立即使用call 方法调用pollUntil 函数,由于then 设置的上下文而传入当前的this 值回调到 Command 对象,然后最后链接另一个 Command。

    这就是上面的代码使用正确的条件分支和pollUntil 变成的。

    tdd.test(tableUrl, function() {
      this.timeout = 60000;
      return this.remote.get(require.toUrl("tests/pages/" + tableUrl))
      .setPageLoadTimeout(60000)
      .setFindTimeout(5000)
      .findByCssSelector('.dataTables_wrapper table.dataTable')
      .then((function() {
        return pollUntil(function() {
          var table;
          table = document.querySelector('.dataTables_wrapper table.dataTable');
          if (table.querySelectorAll('tbody td').length > 1) {
            return true;
          } else {
            return null;
          }
        }, null, 20000, 500).call(this).then(function() {
          console.log('Assertion succeeded: Table should have data');
          return assert.ok(true, 'Table should have data');
        }, function(err) {
          return assert.fail('', '', 'Table should have data');
        });
      }), function(err) {
        return assert.fail('', '', "Table should exist. Error: " + err.name);
      });
    });
    

    【讨论】:

    • 可以用 registerSuite 代替 tdd 吗?
    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2023-03-18
    • 2019-07-05
    • 2015-11-28
    相关资源
    最近更新 更多