1

インターウェブで見つけたさまざまな提案を使用して、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) で

4

2 に答える 2

0

'selenium.AddLocationStrategy(...)'を呼び出す前に'selenium.Start()'を呼び出す必要があることがわかりました。変更されたコードは次のとおりです。

  [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;
   }
}
于 2010-12-18T16:03:14.853 に答える
0

Sessionid null は通常、selenium オブジェクトが渡されていないことを意味します。オブジェクトを渡してみてください。うまくいきます。

于 2010-12-18T12:50:21.957 に答える