javascript 是否可以在运行JS脚本之前运行bash文件

w6lpcovy  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(164)

我正在尝试找到一个正确的脚本来调用我的bash文件,在运行我的剧作家之前有一个经过认证的组织可以登录(自动化工具)脚本。我目前正在利用codegen工具从我的UI生成javascript代码。目前,我所有的登录凭据都集成在该脚本中。我有一个bash文件,可以运行并自动登录到我的组织(不需要凭据)。我遇到的问题是尝试在登录之前调用bash,然后继续运行我的剧作家脚本。这是可以做到的吗?有人知道我应该采取什么步骤来完成这件事吗?如果有更好的方法(不使用bash文件),请让我知道。
我希望运行bash登录,并希望使用相同的登录令牌保持打开状态,以便在该环境中执行脚本进行测试。

dgiusagp

dgiusagp1#

是的,可以在运行JavaScript脚本之前运行bash脚本。您可以使用Node.js中的child_process模块生成新进程并运行bash脚本。
下面是一个示例,说明如何在运行名为myjs.js的JavaScript脚本之前运行名为myscript.sh的bash脚本:

const { execSync } = require('child_process');

try {
    execSync('bash myscript.sh', { stdio: 'inherit' });
    console.log('Bash script ran successfully');
    } catch (err) {
    console.error(`Error running bash script: ${err}`);
    }

   require('./myjs.js');

在本例中,execSync用于同步运行bash脚本(即,在bash脚本运行完成之前,JavaScript脚本不会运行)。stdio选项设置为'inherit',以便将bash脚本的任何输出发送到与JavaScript脚本的输出相同的位置。
或者,您可以使用spawnSyncexecspawn异步运行bash脚本。
如果要同时运行两个脚本,还可以使用&运算符。示例:bash myscript.sh&节点myjs.js
在运行用于自动化测试的Playwright脚本之前,先运行bash脚本,以便通过您的组织进行身份验证。实现此目的的一种方法是使用Node.js child_process模块生成新进程,然后运行bash脚本,以便通过您的组织进行身份验证。一旦bash脚本成功完成并且组织通过身份验证,您就可以使用该经过身份验证的会话运行您的Playwright脚本。
下面是一个示例,说明如何执行此操作:

const { execSync } = require('child_process');

try {
  execSync('./authenticate.sh', { stdio: 'inherit' });
  console.log('Authenticated successfully');
 } catch (err) {
  console.error(`Error authenticating: ${err}`);
 }

 // Now that the org is authenticated, run your Playwright script
 runPlaywrightScript();

在此示例中,./authenticate.sh是向您的org进行身份验证的bash脚本。stdio选项设置为'inherit',以便将bash脚本的任何输出发送到与JavaScript脚本的输出相同的位置。
另一种方法是使用shelljs之类的库,它允许您像在常规shell中一样在node.js中执行shell命令

const shell = require('shelljs');

 if (shell.exec('./authenticate.sh').code !== 0) {
 console.error('Error authenticating');
 shell.exit(1);
 }
 console.log('Authenticated successfully');

// Now that the org is authenticated, run your Playwright script
 runPlaywrightScript();

您还可以从bash登录脚本中提取令牌(如果它导出了令牌),并将其附加到剧作家脚本,这样剧作家脚本就不需要登录和使用已经通过身份验证的会话。
或者,如果您不想使用bash脚本,可以使用为Salesforce REST API提供客户端的JavaScript库(如jsforcesalesforce-js-client),以便在运行Playwright脚本之前在JavaScript脚本中向您的组织进行身份验证。
在任何情况下,请确保您调用的用于身份验证的脚本或命令不需要任何用户交互,并且以无头模式运行,否则在自动化模式下运行时可能会导致问题。

相关问题