[英]Get Session ID for a Selenium RemoteWebDriver in C#
I'm trying to get a session id for a test being run on the SauceLabs cloud, but I can't seem to access it.我正在尝试获取在 SauceLabs 云上运行的测试的会话 ID,但我似乎无法访问它。
I've tried the following approaches:我尝试了以下方法:
//Returns null
var sessionId = (string)((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid");
//Will not compile
sessionId = ((RemoteWebDriver)driver).SessionId; //This is protected.
The second approach is particularly confusing.第二种方法尤其令人困惑。 It's a protected property, but if I can only access this from a derived class, then it's essentially useless for what I need.
这是一个受保护的属性,但如果我只能从派生类访问它,那么它对于我需要的东西基本上没有用。
Any help is appreciated.任何帮助表示赞赏。
In order for this to work, I had to create a class derived from RemoteWebDriver
and then define a getter method.为了
RemoteWebDriver
起作用,我必须创建一个从RemoteWebDriver
派生的类,然后定义一个 getter 方法。 For example:例如:
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();
}
}
Could also reach in using reflection.也可以达到使用反射。
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());
}
}
An Example of what you could do你可以做什么的一个例子
class CustomeRemoteDriver : RemoteWebDriver
{
public CustomRemoteDriver(Uri uri, DesiredCapabilities capabilities)
: base(uri, capabilities)
{
}
public SessionId getExecutionID()
{
return ((CustomRemoteDriver)Driver.Browser.driver).SessionId;
}
}
Simply get sessionId: by this只需获取 sessionId: 通过这个
String sessionId = ((RemoteWebDriver)webDriver).getSessionId().toString();
here这里
WebDriver webDriver = null;
already declared.已经声明。
I am using selenium-dotnet-2.48.0
and this is working just fine:我正在使用
selenium-dotnet-2.48.0
,这工作得很好:
string sessionId = ((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid").ToString();
Make sure you set video to True:确保将视频设置为 True:
DesiredCapabilities capability = DesiredCapabilities.Firefox();
...
capability.SetCapability("video", "True");
使用 Selenium.WebDriver Version="3.141.0",这是有效的:
string sessionId = ((RemoteWebDriver)Driver).SessionId.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.