当前位置: 首页 > 知识库问答 >
问题:

Selenium网格无法在最新的Selenium版本上工作

岑畅
2023-03-14

升级到最新的selenium后,Selenium网格给出了注册请求()的错误。我req.set角色()、req.set配置()等找不到。看起来像是注册请求()类在selenium新版本中得到了改变,但不确定如何使用该类并修改我现有的代码。知道如何解决这个问题吗?

这是我的密码,

package selenium;

import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.openqa.grid.common.GridRole;
import org.openqa.grid.common.RegistrationRequest;
import org.openqa.grid.internal.utils.configuration.GridHubConfiguration;
import org.openqa.grid.internal.utils.SelfRegisteringRemote;
import org.openqa.grid.web.Hub;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SeleniumGrid {

    private static Hub hub;
    private static URL remoteURL;
    private static RegistrationRequest req = new RegistrationRequest();
    private Map<String, Object> nodeConfig = new HashMap<String, Object>();
    private static SelfRegisteringRemote remote = new SelfRegisteringRemote(req);

    SeleniumBase sb = new SeleniumBase();

    public void setup() throws Exception {

        hub = getHub("localhost", 4458);
        remoteURL = new URL("http://" + hub.getUrl() + ":" + 5555);

        // req = setRegRequest();
        req.setRole(GridRole.NODE);
        req.addDesiredCapability(sb.getCapability());

        List<DesiredCapabilities> dc = req.getCapabilities();

        for (DesiredCapabilities c : dc) {
            System.out.println("Using capabilities: " + c.toString());
        }

        // nodeConfig.put(req.AUTO_REGISTER, true);
        nodeConfig.put(req.HUB_HOST, hub.getHost());
        nodeConfig.put(req.HUB_PORT, hub.getPort());
        nodeConfig.put(req.PORT, 5555);

        // nodeConfig.put(RegistrationRequest.PROXY_CLASS, "org.openqa.grid.selenium.proxy.DefaultRemoteProxy");
        nodeConfig.put(req.MAX_SESSION, 1);
        // nodeConfig.put(RegistrationRequest.CLEAN_UP_CYCLE, 2000);
        nodeConfig.put(req.REMOTE_HOST, remoteURL);
        nodeConfig.put(req.MAX_INSTANCES, 1);

        nodeConfig.put(req.BROWSER, "firefox");
        nodeConfig.put(req.UNREGISTER_IF_STILL_DOWN_AFTER, 20000);

        nodeConfig.put(req.HOST, hub.getHost());

        System.out.println("Hub Port: " + hub.getHost() + hub.getPort());
        System.out.println(req.HOST);
        System.out.println(req.HUB_HOST);
        System.out.println(req.HUB_PORT);

        req.setConfiguration(nodeConfig);

        remote.startRemoteServer();

        remote.startRegistrationProcess();

    }

    public RegistrationRequest setRegRequest() {
        RegistrationRequest request = new RegistrationRequest();

        request.setRole(GridRole.NODE);
        request.addDesiredCapability(sb.getCapability());

        List<DesiredCapabilities> dc = request.getCapabilities();

        for (DesiredCapabilities c : dc) {
            System.out.println("Using capabilities: " + c.toString());
        }
        return request;

    }

    public Hub getHub(String host, int port) {
        GridHubConfiguration config = new GridHubConfiguration();
        config.setHost(host);
        config.setPort(port);
        Hub someHub = new Hub(config);

        return someHub;

    }

    public void tearDown() throws Exception {
        remote.stopRemoteServer();
        hub.stop();
    }
}

共有1个答案

冯文彬
2023-03-14

这是一个成熟的工作示例,它启动一个中心,启动一个节点,将节点连接到中心,对本地分离的中心运行测试,然后关闭节点,然后关闭中心。

import org.openqa.grid.common.GridRole;
import org.openqa.grid.internal.utils.SelfRegisteringRemote;
import org.openqa.grid.internal.utils.configuration.GridHubConfiguration;
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration;
import org.openqa.grid.selenium.proxy.DefaultRemoteProxy;
import org.openqa.grid.web.Hub;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.server.SeleniumServer;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;

public class SeleniumGrid {

    private Hub hub;
    private SelfRegisteringRemote remote;

    @BeforeClass
    public void setup() throws Exception {
        hub = getHub("localhost", 4458);
        hub.start();
        remote = new SelfRegisteringRemote(getNodeConfiguration());
        remote.addBrowser(DesiredCapabilities.firefox(), 2);
        SeleniumServer server = new SeleniumServer(remote.getConfiguration());
        remote.setRemoteServer(server);
        remote.startRemoteServer();
        remote.startRegistrationProcess();
    }

    @Test
    public void test() throws MalformedURLException {
        URL url = new URL(hub.getUrl() + "/wd/hub");

        RemoteWebDriver driver = new RemoteWebDriver(url, DesiredCapabilities.firefox());
        try {
            driver.get("http://www.google.com");
            System.err.println("Title " + driver.getTitle());
        } finally {
            driver.quit();
        }
    }

    @AfterClass
    public void tearDown() throws Exception {
        remote.stopRemoteServer();
        hub.stop();
    }

    private GridNodeConfiguration getNodeConfiguration() {
        GridNodeConfiguration nodeConfiguration = new GridNodeConfiguration();

        nodeConfiguration.register = true;
        nodeConfiguration.hub = String.format("http://%s:%d", hub.getConfiguration().host, hub.getConfiguration().port);
        nodeConfiguration.port = 5555;
        nodeConfiguration.proxy = DefaultRemoteProxy.class.getCanonicalName();
        nodeConfiguration.maxSession = 1;
        nodeConfiguration.cleanUpCycle = 2000;
        nodeConfiguration.unregisterIfStillDownAfter = 20000;
        nodeConfiguration.role = GridRole.NODE.toString();
        nodeConfiguration.port = 5555;
        nodeConfiguration.getHubHost();
        nodeConfiguration.hub = String.format("http://%s:%d", hub.getConfiguration().host, hub.getConfiguration().port);
        return nodeConfiguration;
    }

    private Hub getHub(String host, int port) {
        GridHubConfiguration config = new GridHubConfiguration();
        config.host = host;
        config.port = port;
        return new Hub(config);
    }
}
 类似资料:
  • 下面是我的代码,我正在使用它来传递浏览器、节点和枢纽港来启动浏览器并执行测试,但是我得到了异常,尽管我能够设置selenium服务器。我把错误贴在代码下面。我使用mac book、Selenium3.4、Firefox55和Gecko0.18.0 下面是命令提示符中的日志

  • 我正在尝试使用Selenium执行自动化测试 org.openqa.selenium.WebDriverExc0019:错误转发新会话找不到:功能[{BrowserName=chrome, chromeOptions={args=[--start-最大化,--disable-web-Security],扩展=[], prefs={credentials_enable_service=false,p

  • null Appium--NodeConfig C:\mobile\AndroidConfig.json 我得到了一个例外: 信息:欢迎使用Appium V1.3.4(REV c8c79a85fbd6870cd6fc3d66d038a115ebe22efe)信息:Appium REST http接口监听器在0.0.0.0:4723上启动信息:[debug]非默认服务器args:{“nodeConf

  • null V: BrowserTimeout:0 调试:false DownPollingLimit:2 集线器:http://jenkins主机:jenkins端口 ID:http://node ip:node端口 null 异常的第一行说它无法解析某些东西,但我不能理解什么? 我是不是漏掉了什么?我是第一次做网格设置。

  • 我必须在IE 10浏览器上运行Selenium测试。为了运行以下脚本,我执行了以下操作: > 从这里下载了IEDriverServer(64位,因为我的机器是64位) 将该(. exe)文件放在“C://驱动程序”文件夹中 设置路径'C://驱动程序'在环境变量 运行脚本 运行 aboe 脚本会导致以下错误: 同样的脚本在Chrome和Firefox浏览器上运行良好。请帮助我理解我做错了什么。