2015-07-28 2 views
0

, если я использую веб-драйвер, то он работает отличноexecutePhantomJS на Remotewebdriver

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

Как я могу заставить его работать?

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

UPDATE

Мой код

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 дает ошибку: The executePhantomJS метод (String) не определено для типа RemoteWebDriver.

Если я использую executeScript, это не сработает.

Мне нужно запустить тест 100 параллельно, я не могу использовать webdriver.

+0

Я хочу 100 тестов запустить параллельно –

+0

если я бег 100 тестов в то же время, то происходит сбой моего тест –

ответ

1

Я предполагаю, что вы хотите запустить PhantomJSDriver на Se Seid. Вот как это работает для меня (C выполнение # Factory):

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.

+0

у меня есть соединение PhantomJSDriver + селеновая сетка. –

+0

Я хочу выполнить скрипт phantomjs на сетке селена –

+0

Код, который я вам дал, - это решение. И только FYI - драйверам все равно, что «скрипты» будут переданы им в отношении браузера (Firefox, Chrome, Phantom, IE и т. Д.). – ekostadinov

0

Если вы хотите запустить 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, который хочет взаимодействовать с API PhantomJS. Следующий пример получает название страницы корыта PhantomJS API (страницы модуль Web):

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

Я понимаю, что это происходит некоторое время, но я только что попробовал это на Selenium 3.0.1, и он, похоже, не работает. Команда, кажется, успешно добавлена, но во время выполнения я получаю это при запуске скрипта: '' ' System.NotImplementedException: POST/session/xxxx/phantom/execute Информация о сборке: версия:« 3.0.1 », версия для печати: '1969d75', время: '2016-10-18 09:48:19 -0700' Системная информация: host: 'xxxx', ip: 'xxxx', os.name: 'Windows 10', os.arch : 'amd64', os.version: '10 .0 ', java.version:' 1.8.0_111 ' Информация о драйвере: драйвер.version: unknown '' ' – Jordan

+0

Я только что пробовал приведенный выше код и работал нормально, я использовал следующие инструменты: 1. Приложение C# NET Core Console с пакетом CoreCompat.Selenium.WebDriver версии 3.2.0-beta003 2. Я использовал контейнеры докеров отсюда: [link] https://github.com/SeleniumHQ/docker-selenium (изображения контейнера селена/концентратора и селена/узла-phantomjs с новейшими версиями) – wata

Смежные вопросы