Получение исключения Selenium RC null sessionId при попытке включить JQuery AddLocationStrategy - PullRequest
1 голос
/ 18 декабря 2010

Я большую часть дня пытался включить JQuery-локаторы на Selenium RC , используя различные предложения, которые я нашел на веб-сайтах, но без особой удачи.Я следовал советам, приведенным в этой теме, по включению локаторов JQuery:

Как добавить локаторы JQuery в Selenium Remote Control

Я исправил файл TestRunner какпредложил, и я применил то же самое исправление к файлу RemoteRunner.Я также пропатчил соответствующие файлы * .hta.Я также добавил минимизированный файл jquery.min.js в каталог lib в файле JAR.

Я также пытался сохранить целостность JAR сервера и использовать файл user-extensions.js (который содержит jquery.min.js).Но это тоже не сработало.

Во всех случаях я получаю следующую ошибку времени выполнения:

19: 10: 50.174 ОШИБКА - Исключительная ситуация при выполнении команды addLocationStrategyв сеансе null java.lang.NullPointerException: sessionId не должен быть нулевым;этот сеанс уже запущен?

Моя конфигурация:

64-битная Win7
IIS
selenium-server-1.0.3
Firefox
C #

Я нашел два варианта JavaScript для вызова .AddLocationStrategy ().Вот моя реализация:

[SetUp]
public void SetupTest()
{
   selenium = SeleniumUtils.GetSeleniumWithJQueryStrategy("localhost", 4444, "*firefox", "http://localhost:55023");
   selenium.Start();
   sbVerificationErrors = new StringBuilder();
}

А вот мой класс Utility

  public static class SeleniumUtils
  {
     public static ISelenium GetSeleniumWithJQueryStrategy(string serverHost, int serverPort, string browserString, string browserURL)
     {
        ISelenium selenium = new DefaultSelenium(serverHost, serverPort, browserString, browserURL);
        selenium.AddLocationStrategy("jquery", GetJQueryLocationStrategy2());
        return selenium;
     }

     public static string GetJQueryLocationStrategy2()
     {
        string r = @"
     var loc = locator; 
     var attr = null; 
     var isattr = false; 
     var inx = locator.lastIndexOf('@');

     if (inx != -1) 
     { 
        loc = locator.substring(0, inx); 
        attr = locator.substring(inx + 1); 
        isattr = true;
     }

     var selectors = loc.split('<');
     var found = $(inDocument);

     for (var i = 0; i < selectors.length; i++)
     {
        if (i > 0)
        {
           found = $(found.parents()[0]);
        }

        if (jQuery.trim(selectors[i]) != '')
        {
           found = found.find(selectors[i]);
        }
     }

     if (found.length > 0)
     {
        if (isattr)
        { 
           return found[0].getAttributeNode(attr);
        }
        else
        {
           return found[0];
        }
     }
     else
     {
        return null;
     }";
        return r;

     }

     public static string GetJQueryLocationStrategy()
     {
        string r = @"
     var loc = locator;
     var attr = null;
     var isattr = false;
     var inx = locator.lastIndexOf('@');

     if (inx != -1)
     {
        loc = locator.substring(0, inx);
        attr = locator.substring(inx +1);
        isattr = true;
     }

     var found = jQuery(inDocument).find(loc);

     if (found.length >= 1)
     {
        if (isattr)
        {
           return found[0].getAttribute(attr);
        }
        else
        {
           return found[0];
        }
     }
     else
     {
        return null;
     }";
        return r;
     }
  }

Здесь происходит сбой вызова:

19: 10: 13.297 INFO - Запущена org.openqa.jetty.jetty.Server @ 2747ee05
19: 10: 50.139 INFO - проверка псевдонимов ресурсов
19: 10: 50.151 INFO - Запрос команды: addLocationStrategy [jquery,
var loc = locator;
... (выводит остальную часть Javascript) ...
}] в нулевом сеансе
19: 14: 09.796 ОШИБКА - исключение при выполнении команды addLocationStrategy в нулевом сеансе java.lang.NullPointerException: не должно быть sessionIdноль;этот сеанс еще не начался?
в org.openqa.selenium.server.FrameGroupCommandQueueSet.getQueueSet (FrameGroupCommandQueueSet.java:216)
в org.openqa.selenium.server.commands.SeleniumCoreComCoreCoreComCom: 34)

Ответы [ 2 ]

0 голосов
/ 18 декабря 2010

Оказывается, мне нужно вызвать 'selenium.Start ()' перед вызовом 'selenium.AddLocationStrategy (...)' Вот модифицированный код:

  [SetUp]
  public void SetupTest()
  {
     selenium = SeleniumUtils.GetSeleniumWithJQueryStrategy("localhost", 4444, "*firefox", "http://localhost:55023");
     sbVerificationErrors = new StringBuilder();
  }

public static class SeleniumUtils
{
   public static ISelenium GetSeleniumWithJQueryStrategy(string serverHost, int serverPort, string browserString, string browserURL)
   {
      ISelenium selenium = new DefaultSelenium(serverHost, serverPort, browserString, browserURL);
      // Need to call .Start() before calling .AddLocationStrategy()
      selenium.Start();
      selenium.AddLocationStrategy("jquery", GetJQueryLocationStrategy());

      return selenium;
   }
}
0 голосов
/ 18 декабря 2010

Sessionid null обычно означает, что объект селена не был передан.Попробуйте передать объект, он будет работать.

...