亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以編程方式從 Grid 進程生成第二個 Selenium Grid 節點作為另一個進程時出現

以編程方式從 Grid 進程生成第二個 Selenium Grid 節點作為另一個進程時出現

慕的地8271018 2023-07-19 10:48:07
我正在設置 Selenium Grid,它可以從 Grid Servlet 端點上的 HTTP 請求生成新的節點實例:SpawnNodeServlet。GET 請求上的 Servlet 正在創建新的 Selenium 網格節點,并配置將其注冊到集線器。這樣我就可以在需要時通過在 下發送 GET 請求來添加節點http://localhost:4444/grid/admin/SpawnNodeServlet。一切正常,直到我想生成第二個或下一個節點。只有第一個工作正常,之后我得到了 ParameterException (下面的所有代碼)。由于第一個節點正確注冊,參數應該沒問題。有什么想法可能是錯的嗎?我認為,問題可能出在流程創建實施中。我嘗試從 Runtime exec 作為普通命令執行 jar,但這也無法正常工作。final Runtime runtime = Runtime.getRuntime();final Process command = runtime.exec(executionArgs.toArray(new String[0]));下面是InstanceExecutor創建新 Node 實例的主要代碼:public class InstanceExecutor {    private final Logger logger = Logger.getLogger(getClass().getName());    private BufferedReader errorBufferedReader;    private BufferedReader outputBufferedReader;    private int exitValue;    public void execute(List<String> args) throws InstanceExecutorException {        final List<String> executionArgs = new ArrayList<String>();        executionArgs.add(0, "java");        executionArgs.addAll(args);        try {            final ProcessBuilder processBuilder = new ProcessBuilder(executionArgs.toArray(new String[0]));            Process process = processBuilder.start();            logger.info("processBuilder.start()");            this.errorBufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));            this.outputBufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));            logger.info("BufferedReader's");            process.waitFor();            this.exitValue = process.exitValue();            if (this.exitValue != 0) {                throw new IOException("Failed to execute jar, " + this.getExecutionLog());            }        } catch (final IOException | InterruptedException e) {            throw new InstanceExecutorException(e);        }    }
查看完整描述

1 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

在SpawnNodeServlet中,您應該刪除類字段nodeArgs,并將nodeArgs定義為本地方法變量。


您有實例字段:


private final List<String> nodeArgs = new ArrayList<String>();

第一次服務調用后列表包含:


    "-Dwebdriver.chrome.driver=\"libs//chromedriver\""

    "-cp"

    "hub/target/hub-1.0.0-jar-with-dependencies.jar:node/target/node-1.0.0-jar-with-dependencies.jar"

    "org.openqa.grid.selenium.GridLauncherV3"

    "-role"

    "node"

    "-nodeConfig"

    "node/config.json"

第二次調用后:


    "-Dwebdriver.chrome.driver=\"libs//chromedriver\""

    "-cp"

    "hub/target/hub-1.0.0-jar-with-dependencies.jar:node/target/node-1.0.0-jar-with-dependencies.jar"

    "org.openqa.grid.selenium.GridLauncherV3"

    "-role"

    "node"

    "-nodeConfig"

    "node/config.json"

    "-Dwebdriver.chrome.driver=\"libs//chromedriver\""

    "-cp"

    "hub/target/hub-1.0.0-jar-with-dependencies.jar:node/target/node-1.0.0-jar-with-dependencies.jar"

    "org.openqa.grid.selenium.GridLauncherV3"

    "-role"

    "node"

    "-nodeConfig"

    "node/config.json"

然后您將此列表傳遞給執行者:


instanceExecutor.execute(nodeArgs);

這不是有效的 java 參數列表。


查看完整回答
反對 回復 2023-07-19
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號