在 Remotewebdriver 上执行 PhantomJS

executePhantomJS on Remotewebdriver

如果我使用网络驱动程序,那么它就可以完美运行

driver = new PhantomJSDriver(capabilities);
driver.executePhantomJS( "var page = this;");

我怎样才能让它发挥作用?

driver = new RemoteWebDriver(capabilities);
driver.executePhantomJS( "var page = this;");

更新

我的代码

capabilities = DesiredCapabilities.phantomjs();
driver = new RemoteWebDriver(capabilities);


driver.executePhantomJS( "var page = this; binary =0;mimetype=''; count = 0;id=0; bla = '{';"
                                +"page.onResourceReceived = function(request) {"
                                    + "if(id !== request.id){"
                                        +"bla += '\"'+count+ '\":'+JSON.stringify(request, undefined, 4)+',';"
                                        +"if(request.contentType.substring(0, 11) =='application'){"
                                            +"console.log(request.contentType);"
                                            + "mimetype = request.contentType;"
                                            + "binary++;"
                                        + "}"
                                        +"count++;"
                                        + "id = request.id;"
                                    + "}"                       
                                +"};");

Java 给出错误:RemoteWebDriver 类型未定义方法 executePhantomJS(String)。

如果我使用 executeScript,它将不起作用。

我需要 运行 100 个测试并行,我不能使用 webdriver。

我猜你想在你的 Se Grid 上使用 运行 PhantomJSDriver。这就是我的工作方式(C# 工厂实现):

public IWebDriver CreateWebDriver(string identifier)
    {
     if (identifier.ToLower().Contains("ghostdriver"))
        {
            return new RemoteWebDriver(new Uri(ConfigurationManager.AppSettings["Selenium.grid.Url"]), DesiredCapabilities.PhantomJS());
        }
    }

或者试试这个

   Console.WriteLine("Creating GhostDriver (PhantomJS) driver.");
   //Temporary commented for testing purposes
   IWebDriver ghostDriver = new PhantomJSDriver("..\..\..\MyFramework\Drivers");
                ghostDriver.Manage().Window.Maximize();
                //ghostDriver.Manage().Window.Size = new Size(1920, 1080);
                ghostDriver.Manage()
                    .Timeouts()
                    .SetPageLoadTimeout(new TimeSpan(0, 0, 0,
                        Convert.ToInt32(ConfigurationManager.AppSettings["Driver.page.load.time.sec"])));
                return ghostDriver;

如果您想知道为什么有 ConfigurationManager - 我避免使用硬编码值,所以它们是从 App.config 文件中提取的。

如果你想 运行 PhantomJS 脚本与 RemoteWebDriver(为了使用 Selenium Grid),我使用了以下解决方案(不幸的是只有 C#):

  1. 我必须扩展 RemoteWebDriver 以便它可以 运行 PhantomJS 命令:

    public class RemotePhantomJsDriver : RemoteWebDriver
    {
        public RemotePhantomJsDriver(Uri remoteAddress, ICapabilities desiredCapabilities) : base(remoteAddress, desiredCapabilities)
        {
            this.CommandExecutor.CommandInfoRepository.TryAddCommand("executePhantomScript", new CommandInfo("POST", $"/session/{this.SessionId.ToString()}/phantom/execute"));
        }
    
        public Response ExecutePhantomJSScript(string script, params object[] args)
        {
            return base.Execute("executePhantomScript", new Dictionary<string, object>() { { "script", script }, { "args", args } });
        }
    }
    
  2. 在此之后,您可以使用 ExecutePhantomJSScript 方法 运行 任何 JavaScript 想要与 PhantomJS API 交互的代码。以下示例通过 PhantomJS API(网页模块)获取页面标题:

    RemotePhantomJsDriver driver = new RemotePhantomJsDriver(new Uri("http://hub_host:hub_port/wd/hub"), DesiredCapabilities.PhantomJS());
    driver.Navigate().GoToUrl("http://whosebug.com");
    var result = driver.ExecutePhantomJSScript("var page = this; return page.title");
    Console.WriteLine(result.Value);
    driver.Quit();