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

具有多个phantomjs并发实例的Selenium网格节点

钮兴安
2023-03-14

我正在努力添加一个具有许多并发PhantomJS实例的节点。在GhostDriver github页面上,您可以找到将一个节点仅注册一个PhantomJS实例的说明:

phantomjs --webdriver=8080 --webdriver-selenium-grid-hub=http://127.0.0.1:4444

以下是配置选项卡内容:

port:6666
servlets:[]
host:null
cleanUpCycle:5000
browserTimeout:0
hubHost:127.0.0.1
registerCycle:5000
hub:http://127.0.0.1:4444/grid/register/
capabilityMatcher:org.openqa.grid.internal.utils.DefaultCapabilityMatcher
newSessionWaitTimeout:-1
url:http://127.0.0.1:6666
remoteHost:http://127.0.0.1:6666
prioritizer:null
register:true
throwOnCapabilityNotPresent:true
nodePolling:5000
proxy:org.openqa.grid.selenium.proxy.DefaultRemoteProxy
maxSession:1
role:wd
jettyMaxThreads:-1
hubPort:4444
timeout:300000

由于selenium网格允许从命令行定义节点浏览器,我尝试使用phantomjs这样做,但正如您在此处看到的那样,它不受支持。

-浏览器允许的参数:浏览器名称={android、chrome、Firefox、htmlUnit、Internet Explorer、iphone、Opera}版本={浏览器版本}firefox_binary={可执行二进制文件路径}chrome_binary={可执行二进制文件路径}max实例={此类型浏览器的最大数量}平台={WINDOWS、LINUX、MAC}

共有2个答案

邵劲
2023-03-14

我用我自己的Docker容器得到了这个:https://github.com/madhavajay/selenium-node-phantomjs

它使用PhantomJS 2.1.1自定义构建,然后使用我自己对Ghostdriver的修改来允许远程主机,这样网格就可以连接回Docker容器,无论它在哪个主机上。

我希望这对其他人有帮助。:)

Docker Hub:madhavajay/selenium node phantomjs

苏麒
2023-03-14

但我面临以下问题:1)如果我们配置selenium-server-使用以下参数(在UI执行方式上配置,即在ffox、chrome或IE上配置),例如

java -jar  selenium-server-standalone-2.41.0.jar -role node -hub htt
p://localhost:4444/grid/register -port 7575 -browser  browserName=firefox,maxIns
tances=5,platform=WINDOWS

然后我们得到所需的结果:http://gyazo.com/6cd19155c78a59b22a09f4a3da3439b5我希望大家注意,使其成为可能的主要参数是:-浏览器浏览器名=firefox,maxInstances=5,平台=WINDOWS

但是,对于phantomJs上的GhostDriver,我们预计不会启动selenium服务器。jar不过是幻影。exe应用程序,不支持-浏览器参数:未知参数未知参数2

根据允许的phantomjs参数列表,与firefox的5个并发实例相比,我只启动了1个PhantomJSInstance。

在本地主机上,可以使用不同的端口运行多个节点(即Ffox、Chrome):http://gyazo.com/302fab9b6722251aa2cc6d98e2522931

这个解决方案对我有效:

  • 关于项目结构的一些话:我有linux机器(192.34.61.205,selenium hub在这里运行)和大约20个与之相关的phantomJs节点:http://gyazo.com/0a3a50f2ee1638d10b1766e300438891在所有节点上phantomJs都作为服务运行(为了在节点上重启phantomJs,只需输入命令sudo service phantomjs restart

一些节点具有以下IP:162.243.175.134 162.243.175.97 162.243.175.252。。。。

public class BrowserOneInstance extends BaseMethodsForMultipleBrowsers {

    private WebDriver driver;

    private final static Logger log = LoggerFactory.getLogger(BrowserOneInstance.class);
    public static LoginPage loginPage;
    public static FacebookUserPage homePage;

    FileOperations fileManipulator = new FileOperations();


//staring   hub - nodes model (on local WIN machine) over GhostDriver- pHantomJS

    @BeforeClass
    public void seleniumGrridUponGhostDriver() throws MalformedURLException {


//        File phantomjs = Phanbedder.unpack(); //Phanbedder to the rescue!

        File phantomjs = new File(System.getProperty("java.io.tmpdir")+File.separator+"phantomjs-1.9.7");


        DesiredCapabilities dcaps = new DesiredCapabilities();
        dcaps.setCapability("takesScreenshot", true);


        dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, phantomjs.getAbsolutePath());

// !!!!! hardCoded initizliations of GhostDriver node
//        driver = new RemoteWebDriver(new URL("http://localhost:8080"), dcaps);

//    driver initialization   using  method  providing IP of running Ghost node connected to running hub
//        this.driver= new RemoteWebDriver(new URL("http://"+getGhostNodesIp()+":8080"),dcaps);

//        node  connected to linux hub:
        this.driver = new RemoteWebDriver(new URL("http://162.243.175.134:8080"), dcaps);


        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

        //page instances init()
        loginPage = PageFactory.initElements(driver, LoginPage.class);
        homePage = PageFactory.initElements(driver, FacebookUserPage.class);
    }

      @Test
 public void abracadabraTestMethod(){

  ....
 }


        @AfterTest
    public void driverTearDown() {
//        close any of the instances: either Firefox or GhostDriver
        driver.quit();
    }

}

注:

如果您想让phantomJs以跨平台的方式工作,消除手动替换,您可以使用Phantobeder-phantomJs Windows/Mac OS X/Linux本机二进制嵌入器:

import net.anthavio.phanbedder.Phanbedder;

......

 @BeforeClass
    public void seleniumGrridUponGhostDriver() throws MalformedURLException {

        File phantomjs = Phanbedder.unpack(); //Phanbedder to the rescue!


        DesiredCapabilities dcaps = new DesiredCapabilities();
        dcaps.setCapability("takesScreenshot", true);


        dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, phantomjs.getAbsolutePath());


        this.driver = new RemoteWebDriver(new URL("http://162.243.175.134:8080"), dcaps);

......

希望这对你有用。

 类似资料:
  • 我有以下问题 我成功启动了Selenium Grid hub: java-jar selenium-server-standalone-2.53.0.jar-角色中心 之后,我尝试使用以下命令启动PhantomJS节点: 但出现错误: [信息-2016-03-25T13:56:28.397Z]GhostDriver-Main-在8090端口上运行[信息-2016-03-25T13:56:28.39

  • 问题: 我想在AWS上运行Selenium Grid,并希望使用他们的动态扩展。缩小规模,它只会终止一个实例...这意味着一个节点可以就这样消失。不是我想要的行为,但使用脚本或生命周期挂钩,我可以尝试确保节点上的任何会话在终止之前都不是活动的。 似乎我可以点击这个API来断开节点与集线器的连接:http://NODE-IP:5555/selenium-服务器/驱动程序/?cmd=关闭Seleniu

  • 以下是我如何从集线器/节点设置开始进行所有设置... java-jar selenium-server-standalone-2.47.1.jar-role hub-maxinstances=10-maxsession=10-port 7777-timeout 29000 java-jar selenium-server-standalone-2.47.1.jar-role webdriver-h

  • 我想在3个不同的节点上执行我的脚本 对于启动集线器,我使用命令:-java-jar selenium-server-standalone-2.53.0.jar-role hub-port 4444 和节点

  • 问题内容: 我正在尝试使用Selenium服务器网格来并行运行多个命令。这是我的第一个测试代码: 结果是: 请求的屏幕截图 “获取”立即按顺序显示,“ driver.get”创建一个承诺。我的想法是,这三个请求是异步发出的,因此几乎同时出现。但正如您在屏幕截图中看到的那样,它们将一个接一个地制成。网格肯定有足够的selenium实例,那么为什么驱动程序不能并行工作?在我看来,“ new webdr

  • 我正在尝试做一个使用组合键的场景。我想有更多的公钥,这样我就可以用其中任何一个密钥来签署一个txn。 该场景的参考如下:https://docs.corda.net/api/kotlin/corda/net.corda.core.crypto/-composite-key/index.html 根据我的理解,deployNodes任务使用单个公钥生成节点。如果我偏离了轨道,请纠正我。