インターウェブで見つけたさまざまな提案を使用して、Selenium RC で JQuery ロケーターを有効にしようと 1 日の大半を試みましたが、うまくいきませんでした。JQuery ロケーターを有効にするために、このスレッドに含まれる提案に従いました。
Selenium Remote Control に JQuery ロケーターを追加する方法
提案どおりに TestRunner ファイルにパッチを適用し、同じ修正を RemoteRunner ファイルに適用しました。また、それぞれの *.hta ファイルにもパッチを適用しました。また、縮小された jquery.min.js ファイルを JAR ファイルの lib ディレクトリに追加しました。
また、サーバー JAR をそのままにして、user-extensions.js ファイル (jquery.min.js を含む) を使用しようとしました。しかし、これもうまくいきませんでした。
いずれの場合も、次のランタイム エラーが発生します。
19:10:50.174 エラー - セッション null java.lang.NullPointerException: sessionId を null にすることはできません。このセッションはもう始まっていますか?
私の構成は次のとおりです。
Win7 64 ビット
IIS
selenium-server-1.0.3
Firefox
C#
.AddLocationStrategy() の呼び出し用に 2 種類の JavaScript を見つけました。これが私の実装です:
[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 情報 - org.openqa.jetty.jetty.Server@2747ee05 を開始しました
19:10:50.139 情報 - リソース エイリアスを確認しています
19:10:50.151 情報 - コマンド要求: addLocationStrategy[jquery,
var loc = locator;
...(残りの Javascript をエコーします)...
}] セッション null
19:14:09.796 エラー - セッション null で 'addLocationStrategy' コマンドを実行中に例外が発生しました java.lang.NullPointerException: sessionId は null であってはなりません。このセッションはもう始まっていますか?
org.openqa.selenium.server.FrameGroupCommandQueueSet.getQueueSet(FrameGroupCommandQueueSet.java:216)
で org.openqa.selenium.server.commands.SeleniumCoreCommand.execute(SeleniumCoreCommand.java:34) で