You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nightwatch 3.x测试用例中引用命令脚本变量

问题:在Nightwatch 3.x测试脚本中获取自定义命令生成的URL变量

我用Nightwatch 3.x编写了一个从Solr实例生成URL的自定义命令脚本,但不知道如何在测试脚本中获取命令里的solrRandomReviewUrl变量。

自定义命令代码

const solr = require('solr-client');
const solrWpReviews = solr.createClient('solr-master-v9-prd.int.publishing.bauerxcel.tech', '8984','wpparkersreviews');
const publishDateRegex = browser.globals.publishDateRegex;

let solrRandomReviewUrl;

exports.command = async function(browser, done) {
const randomSolrReview = require('../../custom-commands/solrQuery/randomSolrWpReviewEntry');
randomSolrReview.random_solr_wp_review_entry(solrWpReviews, publishDateRegex, function(err, solrRandomReview) {
    if(err) {
        console.log(err);
        done(err);
    } else {
        solrRandomReviewUrl = solrRandomReview.PageUrl.replace('/penelope', '');
            console.log(solrRandomReviewUrl);
        }
    });
};

测试脚本代码

module.exports = {
    'Test script result': async function (browser) {
        await browser.randomTestUrls.randomReviewUrl();
    },
};

解决方案

核心问题说明

原命令中的solrRandomReviewUrl是局部变量,测试脚本无法直接访问,需要通过共享上下文或命令返回结果的方式传递数据。同时原命令的回调写法可以改为Promise风格,适配Nightwatch 3.x的async/await异步处理。

修改自定义命令

以下提供两种可行的修改方式:

方式1:将URL挂载到browser对象

const solr = require('solr-client');
const solrWpReviews = solr.createClient('solr-master-v9-prd.int.publishing.bauerxcel.tech', '8984','wpparkersreviews');

exports.command = async function(browser) {
  return new Promise((resolve, reject) => {
    const randomSolrReview = require('../../custom-commands/solrQuery/randomSolrWpReviewEntry');
    const publishDateRegex = browser.globals.publishDateRegex;
    
    randomSolrReview.random_solr_wp_review_entry(solrWpReviews, publishDateRegex, function(err, solrRandomReview) {
      if(err) {
        console.log(err);
        reject(err);
      } else {
        const solrRandomReviewUrl = solrRandomReview.PageUrl.replace('/penelope', '');
        console.log(solrRandomReviewUrl);
        // 将URL挂载到browser对象,供测试脚本访问
        browser.solrRandomReviewUrl = solrRandomReviewUrl;
        resolve();
      }
    });
  });
};

方式2:让命令直接返回URL

const solr = require('solr-client');
const solrWpReviews = solr.createClient('solr-master-v9-prd.int.publishing.bauerxcel.tech', '8984','wpparkersreviews');

exports.command = async function(browser) {
  return new Promise((resolve, reject) => {
    const randomSolrReview = require('../../custom-commands/solrQuery/randomSolrWpReviewEntry');
    const publishDateRegex = browser.globals.publishDateRegex;
    
    randomSolrReview.random_solr_wp_review_entry(solrWpReviews, publishDateRegex, function(err, solrRandomReview) {
      if(err) {
        console.log(err);
        reject(err);
      } else {
        const solrRandomReviewUrl = solrRandomReview.PageUrl.replace('/penelope', '');
        console.log(solrRandomReviewUrl);
        // 返回生成的URL
        resolve(solrRandomReviewUrl);
      }
    });
  });
};

修改测试脚本获取URL

对应上面两种方式,测试脚本的写法如下:

对应方式1:从browser对象读取

module.exports = {
    'Test script result': async function (browser) {
        await browser.randomTestUrls.randomReviewUrl();
        // 获取命令中挂载到browser的URL
        const reviewUrl = browser.solrRandomReviewUrl;
        console.log('获取到的Solr Review URL:', reviewUrl);
        // 后续可执行操作,比如跳转至该URL
        await browser.url(reviewUrl);
    },
};

对应方式2:接收命令返回的结果

module.exports = {
    'Test script result': async function (browser) {
        // 直接接收命令返回的URL
        const reviewUrl = await browser.randomTestUrls.randomReviewUrl();
        console.log('获取到的Solr Review URL:', reviewUrl);
        // 后续可执行操作,比如跳转至该URL
        await browser.url(reviewUrl);
    },
};

内容的提问来源于stack exchange,提问作者Darren Harley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:57:28