如何从其他js文件执行selenium node js脚本

Hel*_*nds 3 javascript selenium node.js selenium-webdriver

我按照以下方式创建了文件:

Demo.js

var webdriver = require('selenium-webdriver');     

var driver = new webdriver
    .Builder()
    .withCapabilities(webdriver.Capabilities.chrome())
    .build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('simple programmer');
driver.findElement(webdriver.By.name('btnK')).click();
driver.quit();
Run Code Online (Sandbox Code Playgroud)

Run.js

var express = require('express');

var app = express(); 
app.get('/', function (req, res) {
    res.send('<button type="button" onclick="test();">Run Script</button>');
});

var server = app.listen(8081, function () {
    var host = server.address().address;
    var port = server.address().port;
    console.log("Example app listening at http://%s:%s", host, port);
});

function test() {
    var fork = require('child_process').fork;
    var child = fork('./Demo');
}
Run Code Online (Sandbox Code Playgroud)

我想做的是:

  1. 当我运行文件时Run.js,它有一个名为"运行脚本"的按钮.
  2. 一旦我点击该按钮,它应该运行存储在其中的自动化脚本Demo.js.

目前对我来说测试功能不起作用,无法Demo.js点击按钮运行.

错误

Uncaught ReferenceError: test is not defined
    at HTMLButtonElement.onclick
Run Code Online (Sandbox Code Playgroud)

Flo*_* B. 5

您正在test客户端调用该函数,但该函数是在服务器端定义的.

您可以在客户端创建一个表单,该表单会在单击时向服务器发送一个发布请求.然后POST在服务器端处理请求以执行所需的代码:

app.get('/', function (req, res) {
   res.send(
    '<form action="/run" method="POST">' +
    '  <input type="submit" name="run" value="Run Script" />' +
    '</form>');
});

app.post('/run', function (req, res) {
  var fork = require('child_process').fork;
  var child = fork('./Demo');
  res.send('done');
});
Run Code Online (Sandbox Code Playgroud)

您还可以POST在客户端发送带有Ajax请求的请求:
使用Ajax和Node.js的简单按钮单击示例?