2010-12-18 10 views
1

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)

+0

、それで遊んで後これは私が "selenium.AddLocationStrategy(...)"を呼び出す前に "selenium.Start()"と呼ぶ必要があることに気づきました。 –

答えて

0

セッションID nullは通常、セレンオブジェクトが渡されていないことを意味します。オブジェクトを渡してみてください、それは動作します。

+0

もっと具体的になることができますか?どちらの方法を参考にしていますか? .AddLocationStrategy()のオーバーロードはありません。私が見る唯一の他の可能性は、.DefaultSelenium()のオーバーロードを使用することです。 –

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; 
    } 
} 
関連する問題