msi*_*msi 7 c# selenium webdriver selenium-webdriver
是否可以从IWebElement获取WebDriver?
我需要以下扩展名:
public static bool HasFocus(this IWebElement e)
{
var driver = ((????)e).WebDriver;
var activeElement = driver.SwitchTo().ActiveElement();
return Equals(activeElement, e);
}
Run Code Online (Sandbox Code Playgroud)
但是不知道是否可以将IWebElement转换为某种类型来获取WebDriver.
小智 8
从IWebElement获取WebDriver的最佳方法是区分Object类型是否为WebElementProxy,如下所示:
if (this.webElement.GetType().ToString() ==
"OpenQA.Selenium.Support.PageObjects.WebElementProxy")
{
this.WebDriver = ((IWrapsDriver)this.webElement
.GetType().GetProperty("WrappedElement")
.GetValue(this.webElement, null)).WrappedDriver;
}
else
{
this.WebDriver = ((IWrapsDriver)this.webElement).WrappedDriver;
}
Run Code Online (Sandbox Code Playgroud)
我最近遇到了同样的问题,但发现这是可能的:)
这件事情让我感到很快乐: var driver = ((IWrapsDriver)e).WrappedDriver;
注意:如果您使用 PageFactory 获取 IWebElement,则不可能。
mut*_*utt -4
您可以像这样引用获取该元素的驱动程序。
IWebDriver driver = element.WrappedDriver;
Run Code Online (Sandbox Code Playgroud)
您也可以直接从element.WrappedDriver
更新:
RemoteWebDriver实现IWebDriver接口。
ChromeDriver、FirefoxDriver、IEDriver都扩展了 RemoteWebDriver包含IWebDriver接口的类。
同样RemoteWebElement会做同样的事情并具有该属性。因此,将您的接口更改IWebElement为RemoteWebElement实现该IWebElement接口的接口,您就可以使用该接口了。
一般来说,尝试将其保留为类实例,因为 IWebElement 接口实例几乎没有真正与之相关的东西。如果将其保留在RemoteWebDriverandRemoteWebElement类实例中,您将获得更多选择。