Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium - MoveToElement() with transparent proxy

I have element

public ArticlePage()
{
    PageFactory.InitElements(Browser.driver, this)
}

[FindsBy(How = How.Id, Using = "someId")]
private IWebElement btnTitleView { get; set; }

and action

Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView).Perform();

But when i try to run it, i will get error

'System.Reflection.TargetException' Object does not match target type.

I tried to locate this element by Browser.driver.FindElement(By.Id("someId")) and then it is working correctly. So, it is present and displayed.
Is it possible to use transparent proxy to perform Actions? Is there any other way to perform MoveToElement() like action on transparent proxy?

like image 848
nEkis Avatar asked Mar 07 '26 20:03

nEkis


2 Answers

In order to unwrap element which using transparent proxy you can use IWrapsElement interface which has WrappedElement property:

action.MoveToElement(((IWrapsElement)btnTitleView).WrappedElement).Build().Perform();

You may also want to have that cast included as extension method of IWebElement object:

public static class IWebElementExtensions
{
    public static IWebElement Unwrap(this IWebElement element)
    {
        return ((IWrapsElement)element).WrappedElement;
    }
}

Then the code of your action might look like this:

Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView.Unwrap()).Build().Perform();

I hope that answer will help you with your problem :)

like image 104
Gucu112 Avatar answered Mar 09 '26 09:03

Gucu112


One way how to get around this is to use IList<IWebElement> and than use foreach or LINQ to manipulate the element. So you can use:

[FindsBy(How = How.Id, Using = "someId")]
private IList<IWebElement btnTitleView { get; set; }
...

Actions action = new Actions(Browser.driver);
action.MoveToElement(btnTitleView.First()).Perform();

or

foreach (var element in btnTitleView)
{
   Actions action = new Actions(Browser.driver);
   action.MoveToElement(element).Perform();
}
like image 26
nEkis Avatar answered Mar 09 '26 09:03

nEkis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!