Я большую часть дня пытался включить 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)