当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 如何在mocha测试用例中暂停或等待 – setTimeout无效

来源:互联网 收集:自由互联 发布时间:2021-06-16
我建立了一个selenium-mocha测试用例来打开谷歌,输入一些文本并点击搜索. 这是我的selenium-mocha测试用例代码片段 但是我需要在输入搜索文本60秒后才执行点击搜索 var assert = require('assert
我建立了一个selenium-mocha测试用例来打开谷歌,输入一些文本并点击搜索.
这是我的selenium-mocha测试用例代码片段

但是我需要在输入搜索文本60秒后才执行点击搜索

var assert = require('assert'),
       test = require('selenium-webdriver/testing'), 
       webdriver = require('selenium-webdriver');
   var urladd ='http://www.google.com/';

   function clickLink(link){
      link.click();
      return link;
   }

  var testSimple=function(searchContent){
    var browser = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
    test.describe('\n\nGoogle Search\n', function() {
      this.timeout(60000);
      test.it('Enter element to be searched', function(done) {
        browser.get(urladd);
        browser.findElement(webdriver.By.name('q')).sendKeys(searchContent);
        browser.getTitle().then(function(title) {
          assert.equal(title,'Google');
        })
      });

      test.it('Click search button', function(done) {
        setTimeout(function(){
            browser.findElement(webdriver.By.name('btnG')).then(clickLink).then(function(){
            browser.getTitle().then(function(title) {
            assert.equal(title,'selenium mocha test cases - Google Search');
          });
        });
        },30000);
      });   
    });
  }

  testSimple('selenium mocha test cases');

我使用setTimeout暂停60秒但是,mocha只是通过测试用例而不执行超时内的代码

有没有人可以为这个或任何其他可用于暂停mocha测试的API提出更好的解决方案

Google Search

  √ Enter element to be searched (7771ms)
  √ Click search button

2 passing (8s)
在得到问题之前,有几点注意事项:

>您不需要为传递给test.it的函数完成.您正在使用selenium-webdriver包装的Mocha函数,这使得所有测试都是异步的.这样做是没用的.
>您的第二次测试取决于第一项测试.这是糟糕的设计.测试应该是独立的.关于如何使测试独立的SO已经存在问题,所以我不打算在这里再次解决这个问题.

这里的等待问题是你如何解决它.您可以将第二个测试修改为:

test.it('Click search button', function() {
    var flow = webdriver.promise.controlFlow();
    flow.execute(
        function () { return webdriver.promise.delayed(30 * 1000); });
    browser.findElement(webdriver.By.name('btnG')).then(clickLink);
    browser.wait(function () {
        return browser.getTitle().then(function (title) {
            return title === 'selenium mocha test cases - Google Search';
        });
    });
});

这样做是创建一个执行承诺的control flow. webdriver.promise.delayed只创建一个promise,它将以传递给函数的毫秒数来解析.然后你可以在浏览器上调用方法.最终效果是暂停浏览器上的操作30秒.

您的代码的另一个问题是它没有等待标题更改.当点击发生时,标题需要更改,因此Selenium代码必须等待,因此最后会调用browser.wait.如果标题永远不会更改,则测试将因超时而失败.

网友评论