Nightwatch.js函数未“关闭”

时间:2019-02-19 10:01:26

标签: javascript function selenium selenium-webdriver nightwatch.js

我正在尝试在测试开始时执行功能,然后应该执行其余测试。

这是我的自定义命令(名为internalAdviceLinksHtml):

var solr = require('solr-client')

exports.command = function() {
  this
  var client = solr.createClient('solr.dev.bauerhosting.com', 8080, 'cms', '/www.parkers.co.uk');
  var globalSettingsQuery = client.createQuery()
      .q({TypeName:'Bauer.Parkers.GlobalSettings'})
      .start(0)
      .rows(10);  

  client.search(globalSettingsQuery,function(err,obj) {
    if (err) {
      console.log(err);
    } else {      
      var myresult = (obj.response.docs[0].s_InternalAdviceLinksHtml);

      console.log(myresult.length);
      if (myresult.length === 0) {
        console.log('content block not configured');
      } else {    
        console.log('content block configured');
      }
    }
  });        
  return this;
};

测试文件脚本):

module.exports = {
  'set up the solr query': function (browser) {
    browser
      .solr_query.global_settings.internalAdviceLinksHtml();
  },

  'links above footer on advice landing page displayed': function (browser) {
    browser
      .url(browser.launch_url + browser.globals.carAdvice)
      .assert.elementPresent('section.seo-internal-links')
  },

  'closing the browser': function (browser)  {
    browser
      .browserEnd();
  },  
}; 

该功能正常工作(例如,如果myresult的长度为0,则显示 “未配置内容块” ,依此类推),但是进行了以下测试(“显示在建议登录页面上的页脚上方的链接” )不会被调用。

自定义命令之后,执行似乎停止了。我相信这对某人来说将是显而易见的,但是我似乎看不出它是什么。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

关于您的internalAdviceLinksHtml自定义命令,从我的角度来看一切都很好(我认为孤独的this是一个错字)。

您的预感是正确的,似乎Nightwatch测试运行程序无法进行下一个测试,这可能是由于某些承诺没有在上游解决(client.search中的internalAdviceLinksHtml函数)。

我建议在输出到控制台( 未配置内容块 ,或 内容块已配置之后)立即执行return this strong> ),看看是否可以解决问题:

  client.search(globalSettingsQuery,function(err,obj) {
    if (err) {
      console.log(err);
    } else {      
      var myresult = (obj.response.docs[0].s_InternalAdviceLinksHtml);

      console.log(myresult.length);
      if (myresult.length === 0) {
        console.log('content block not configured');
      } else {    
        console.log('content block configured');
      }
    }
    return this
  });

另外,还有一些额外的指针:

  • 利用Nightwatch test-hooks使您的测试更易于阅读/维护并建立关注点( 设置 => {{1} } / before挂钩| 拆卸 (例如:beforeEach => browser.end() / after挂钩); < / li>
  • 您无需在测试用例的末尾进行明确的afterEach。查看this答案以获取有关此问题的更多信息。

您的测试文件将变为:

browser.end()