2013-04-02 9 views
7

我試圖獲得在SauceLabs雲上運行的測試的會話ID,但似乎無法訪問它。在C#中獲取Selenium RemoteWebDriver的會話ID

我嘗試以下方法:

//Returns null 
var sessionId = (string)((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid"); 

//Will not compile 
sessionId = ((RemoteWebDriver)driver).SessionId; //This is protected. 

第二種方法是特別混亂。它是一個受保護的屬性,但是如果我只能從派生類訪問這個屬性,那麼它對我所需要的基本沒有用處。

Session ID

任何幫助表示讚賞。

爲了達到這個目的,我必須創建一個派生自RemoteWebDriver的類,然後定義一個getter方法。例如:

class CustomeRemoteDriver : RemoteWebDriver 
{ 

    public CustomeRemoteDriver(ICapabilities desiredCapabilities):base(desiredCapabilities) 
    { 
    } 

    public CustomeRemoteDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities):base(commandExecutor, desiredCapabilities) 
    { 
    } 

    public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities):base(remoteAddress, desiredCapabilities) 
    { 
    } 

    public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout):base(remoteAddress, desiredCapabilities, commandTimeout) 
    { 
    } 

    public string GetSessionId() 
    { 
     return base.SessionId.ToString(); 
    } 
} 
+1

它看起來幾乎就像一個'Casting'問題,您可以張貼什麼實際的錯誤是很難看到你發佈的小圖像 – MethodMan

+0

這裏是一個在線指南,可能會幫助你..也可以顯示如何定義這個類我可能能夠爲您提供一個想法,但需要請參閱Class以及它如何爲您的RemoteWebDriver..ho定義你是繼承這個http://testingbot.com/support/getting-started/csharp.html – MethodMan

+0

所以,我應該只是創建一個派生類來投射我的RemoteWebDriver,然後通過getter方法訪問會話ID? – elucid8

回答

1

的你可以做什麼的例子

class CustomeRemoteDriver : RemoteWebDriver 
{  
    public CustomRemoteDriver(Uri uri, DesiredCapabilities capabilities) 
    : base(uri, capabilities) 
    { 
    } 

    public SessionId getExecutionID() 
    { 
     return ((CustomRemoteDriver)Driver.Browser.driver).SessionId; 
    } 
} 
4

也可以達到使用反射。本

String sessionId = ((RemoteWebDriver)webDriver).getSessionId().toString(); 

這裏

WebDriver webDriver = null; 

已經宣佈 :

  var sessionIdProperty = typeof(RemoteWebDriver).GetProperty("SessionId", BindingFlags.Instance | BindingFlags.NonPublic); 
      if (sessionIdProperty != null) 
      { 
       SessionId sessionId = sessionIdProperty.GetValue(driver, null) as SessionId; 
       if (sessionId == null) 
       { 
        Trace.TraceWarning("Could not obtain SessionId."); 
       } 
       else 
       { 
        Trace.TraceInformation("SessionId is " + sessionId.ToString()); 
       } 
      } 
2

只是得到的sessionId。

+0

這不起作用,因爲RemoteWebDriver不公開此方法 –

0

我使用selenium-dotnet-2.48.0這是工作得很好:

string sessionId = ((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid").ToString(); 

確保您設置視頻爲True:

DesiredCapabilities capability = DesiredCapabilities.Firefox(); 
... 
capability.SetCapability("video", "True");