4

我正在努力添加一个具有许多并发 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 来执行此操作,但正如您在此处看到的那样,它不受支持。

-browser 允许的参数: browserName={android, chrome, firefox, htmlunit, internet explorer, iphone, opera} version={browser version} firefox_binary={path to executable binary} chrome_binary={path to executable binary} maxInstances={maximum这种类型的浏览器数量} platform={WINDOWS, LINUX, MAC}

4

2 回答 2

4

努力解决同样的问题:我希望实现以下架构(下面的屏幕): 架构

但我面临以下问题: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 我想请注意,使之成为可能的主要参数是: -browser browserName=firefox,maxInstances=5,platform=WINDOWS

但是如果使用 phantomJs 上的 GhostDriver,我们预计不会启动 selenium-server-.jar 而是 phantomjs.exe 应用程序,它不支持 -browser 参数: 未知参数 未知参数 2

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

可能这可能会对您有所帮助 - 现在我正在重新组织我的测试架构并将尝试调整到以下内容:1 NODE = 1 PhantomJs 实例。 重组的测试架构

在 localhost 上,可以使用不同的端口运行许多节点(IE、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 以跨平台方式工作,消除手动替换,您可以使用 Phanbedder - 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);

......

希望这对你有用。

于 2014-06-01T11:20:28.190 回答
0

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

它使用 PhantomJS 2.1.1 自定义构建,然后我自己对 Ghostdriver 进行修改以允许 --remoteHost 以便网格可以连接回 Docker 容器,无论它位于哪个主机上。

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

Docker 集线器:madhavajay/selenium-node-phantomjs

于 2017-01-27T09:08:26.990 回答