Selenium - 具有透明代理的 MoveToElement()
Selenium - MoveToElement() with transparent proxy
我有元素
public ArticlePage()
{
PageFactory.InitElements(Browser.driver, this)
}
[FindsBy(How = How.Id, Using = "someId")]
private IWebElement btnTitleView { get; set; }
和行动
Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView).Perform();
但是当我尝试 运行 它时,我会得到错误
'System.Reflection.TargetException' Object does not match target type.
我试图通过 Browser.driver.FindElement(By.Id("someId"))
找到这个元素然后它工作正常。因此,它存在并显示。
是否可以使用透明代理来执行Actions
?有没有其他方法可以在透明代理上执行 MoveToElement()
之类的操作?
解决此问题的一种方法是使用 IList<IWebElement>
而不是使用 foreach
或 LINQ
来操作元素。所以你可以使用:
[FindsBy(How = How.Id, Using = "someId")]
private IList<IWebElement btnTitleView { get; set; }
...
Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView.First()).Perform();
或
foreach (var element in btnTitleView)
{
Actions action = new Actions(Browser.driver);
action.MoveToElement(element).Perform();
}
为了解包使用透明代理的元素,您可以使用具有 WrappedElement
属性:
的 IWrapsElement
接口
action.MoveToElement(((IWrapsElement)btnTitleView).WrappedElement).Build().Perform();
您可能还希望将该转换包含为 IWebElement
对象的扩展方法:
public static class IWebElementExtensions
{
public static IWebElement Unwrap(this IWebElement element)
{
return ((IWrapsElement)element).WrappedElement;
}
}
那么您的操作代码可能如下所示:
Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView.Unwrap()).Build().Perform();
希望我的回答能帮助您解决问题:)
我有元素
public ArticlePage()
{
PageFactory.InitElements(Browser.driver, this)
}
[FindsBy(How = How.Id, Using = "someId")]
private IWebElement btnTitleView { get; set; }
和行动
Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView).Perform();
但是当我尝试 运行 它时,我会得到错误
'System.Reflection.TargetException' Object does not match target type.
我试图通过 Browser.driver.FindElement(By.Id("someId"))
找到这个元素然后它工作正常。因此,它存在并显示。
是否可以使用透明代理来执行Actions
?有没有其他方法可以在透明代理上执行 MoveToElement()
之类的操作?
解决此问题的一种方法是使用 IList<IWebElement>
而不是使用 foreach
或 LINQ
来操作元素。所以你可以使用:
[FindsBy(How = How.Id, Using = "someId")]
private IList<IWebElement btnTitleView { get; set; }
...
Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView.First()).Perform();
或
foreach (var element in btnTitleView)
{
Actions action = new Actions(Browser.driver);
action.MoveToElement(element).Perform();
}
为了解包使用透明代理的元素,您可以使用具有 WrappedElement
属性:
IWrapsElement
接口
action.MoveToElement(((IWrapsElement)btnTitleView).WrappedElement).Build().Perform();
您可能还希望将该转换包含为 IWebElement
对象的扩展方法:
public static class IWebElementExtensions
{
public static IWebElement Unwrap(this IWebElement element)
{
return ((IWrapsElement)element).WrappedElement;
}
}
那么您的操作代码可能如下所示:
Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView.Unwrap()).Build().Perform();
希望我的回答能帮助您解决问题:)