2013-04-02 15 views
7

Sto cercando di ottenere un ID di sessione per un test eseguito sul cloud SauceLabs, ma non riesco ad accedervi.Ottieni ID sessione per un Selecion RemoteWebDriver in C#

ho provato i seguenti approcci:

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

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

Il secondo approccio è particolarmente confusa. È una proprietà protetta, ma se posso accedere a questo da una classe derivata, è essenzialmente inutile per ciò di cui ho bisogno.

Session ID

ogni aiuto è apprezzato.

Per far funzionare tutto questo, ho dovuto creare una classe derivata da RemoteWebDriver e quindi definire un metodo getter. Per esempio:

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

Sembra quasi come un problema di 'Casting' puoi pubblicare ciò che il errore reale è difficile vedere la piccola immagine che hai postato – MethodMan

+0

qui c'è una guida online che potrebbe aiutarti .. puoi anche mostrare come viene definita questa classe Potrei essere in grado di fornirti un'idea ma devi guarda la classe e come è definita per il tuo RemoteWebDriver..ho w erediterai questo http://testingbot.com/support/getting-started/csharp.html – MethodMan

+0

Quindi, dovrei semplicemente creare una classe derivata per trasmettere il mio RemoteWebDriver e quindi accedere all'ID di sessione con un metodo getter? – elucid8

risposta

1

un esempio di quello che si potrebbe fare

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

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

potrebbe anche raggiungere in utilizzando la riflessione.

  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

ottenere semplicemente sessionId: da questo

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

qui

WebDriver webDriver = null; 

già dichiarato.

+0

Questo non funziona, in quanto RemoteWebDriver non espone questo metodo –

0

Sto usando selenium-dotnet-2.48.0 e questo sta lavorando bene:

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

Assicurarsi di impostare il video su True:

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