JQueryロケータをSelenium RCで使用していますが、私はjQueryのロケータを有効にするために、このスレッドに含まれる提案に従ってきました:Jeleryを有効にしようとすると、nullセッションID例外が発生するAddLocationStrategy
How do I add a JQuery locators to Selenium Remote Control
示唆したように、私はテストランナーのファイルにパッチを当て、と私はRemoteRunnerファイルに同じ修正を適用します。また、それぞれの* .htaファイルにパッチを当てました。また、JARファイルのlibディレクトリに、縮小されたjquery.min.jsファイルを追加しました。
私はまた、サーバーJARをそのまま維持し、user-extensions.jsファイル(jquery.min.jsを含む)を使用してみました。しかし、これはうまくいかなかった。
すべての場合において、私は、次のランタイムエラーを取得しています:
19:10:50.174 ERROR - Exception running 'addLocationStrategy 'command on session null java.lang.NullPointerException: sessionId should not be null; has this session been started yet?
私の設定は次のとおりです。
Win7の64ビット
が
セレンサーバー1.0.3
をIIS Firefox
C#
.Adの呼び出しで2つのフレーバーJavaScriptが見つかりましたdLocationStrategy()。呼び出しがここに失敗し
[SetUp]
public void SetupTest()
{
selenium = SeleniumUtils.GetSeleniumWithJQueryStrategy("localhost", 4444, "*firefox", "http://localhost:55023");
selenium.Start();
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);
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 - Started [email protected]
19:10:50.139 INFO - Checking Resource aliases
19:10:50.151 INFO - Command request: addLocationStrategy[jquery,
var loc = locator;
...(echoes rest of Javascript)...
}] on session null
19:14:09.796 ERROR - Exception running 'addLocationStrategy 'command on session null java.lang.NullPointerException: sessionId should not be null; has this session been started yet?
at org.openqa.selenium.server.FrameGroupCommandQueueSet.getQueueSet(FrameGroupCommandQueueSet.java:216)
at org.openqa.selenium.server.commands.SeleniumCoreCommand.execute(SeleniumCoreCommand.java:34)
、それで遊んで後これは私が "selenium.AddLocationStrategy(...)"を呼び出す前に "selenium.Start()"と呼ぶ必要があることに気づきました。 –