Selenium 带实习生/领足的功能测试条件

Selenium 带实习生/领足的功能测试条件,selenium,intern,Selenium,Intern,我希望根据之前的断言是否成功,有条件地执行一些命令/断言 我似乎找不到一种方法来嵌套,然后调用,或者使用leadfoot的链接语法有条件地执行一些事情 这是我的测试(每个函数末尾的返回是由于编译了这个coffeescript): 当表不存在时,“表应该存在”和“表应该有数据”断言都应报告为失败。然而,只有最后一个断言失败了。当我注释掉“Table should have data”错误回调时,“Table should exist”断言被报告为错误 我想做的是 测试是否存在表(通过findByC

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

我似乎找不到一种方法来嵌套
,然后调用
,或者使用leadfoot的链接语法有条件地执行一些事情

这是我的测试(每个函数末尾的返回是由于编译了这个coffeescript):

当表不存在时,“表应该存在”和“表应该有数据”断言都应报告为失败。然而,只有最后一个断言失败了。当我注释掉“Table should have data”错误回调时,“Table should exist”断言被报告为错误

我想做的是

  • 测试是否存在
    (通过findByCssSelector)

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

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

  • 如果第一个
    findByCssSelector
    由于缺少条件而失败,并且只有最后一个断言失败在测试中报告,我似乎找不到一种方法来执行第二个“Table should have data”轮询的错误回调。

    因此条件分支可以在
    然后
    调用中发生,介绍如何使用intern进行条件分支

    我遇到的问题是,由于存在错误,函数的行为方式与正常方法不同

    可以通过将
    polltuntil
    包装在匿名函数中,使用
    call
    方法立即调用
    polltuntil
    函数,将当前
    This
    值(由于将回调上下文设置为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?
    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);
      });
    });