在C#中获取Selenium RemoteWebDriver的会话ID

时间:2013-04-02 14:42:19

标签: c# unit-testing selenium-webdriver saucelabs

我正在尝试获取在SauceLabs云上运行的测试的会话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();
    }
} 

5 个答案:

答案 0 :(得分:4)

也可以使用反射。

            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());
                }
            }

答案 1 :(得分:2)

你可以做什么的例子

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

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

答案 2 :(得分:2)

只需获取sessionId: 通过这个

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

这里

WebDriver webDriver = null; 

已经宣布。

答案 3 :(得分: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");

答案 4 :(得分:0)

使用Selenium.WebDriver版本=“ 3.141.0”,可以正常工作:

string sessionId = ((RemoteWebDriver)Driver).SessionId.ToString();