Не могу выполнить наведение курсора мыши на елемент и кликнуть по нему через Actions
Пытаюсь навести курсор на левый угол елемента и кликнуть по нему
сам елемент ищу так
[FindsBy(How = How.XPath, Using = "//*[@путь к елементу по xpath']")] public IWebElement chkboxElement;
ошибка после попытки выполнить код
IWebElement element = bankDetailsPage.chkboxElement;
new Actions(_driver).MoveToElement(element,1,1).Click().Build().Perform();
тесты пишу на c# , запускаются в FF
System.Reflection.TargetException : Объект не соответствует конечному типу.
в System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)
в System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
в OpenQA.Selenium.Support.PageObjects.WebDriverObjectProxy.InvokeMethod(IMethodCallMessage msg, Object representedValue)
в OpenQA.Selenium.Support.PageObjects.WebElementProxy.Invoke(IMessage msg)
в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(ref MessageData msgData, Int32 type)
в OpenQA.Selenium.ILocatable.get_Coordinates()
в OpenQA.Selenium.Interactions.Internal.MouseAction.get_ActionLocation()
в OpenQA.Selenium.Interactions.MoveToOffsetAction.Perform()
в OpenQA.Selenium.Interactions.CompositeAction.Perform()в Tests.RegisterUser: line 24
может не хватает реализации какой-либо обвертки для вебелементов под FF ??
пристутсвует WebElementAdapter
{ public class WebElementAdapter : IWebElement { private readonly IWebElement _webElement; private readonly IWebDriver _webDriver; private readonly By _sourceBy; public WebElementAdapter(IWebElement webElement, IWebDriver webDriver, By sourceBy) { _webElement = webElement; _webDriver = webDriver; _sourceBy = sourceBy; } public IWebElement FindElement(By @by) { try { return _webElement.FindElement(@by); } catch (Exception ex) { throw new Exception(string.Format("FindElement failed at: '{0}', by: '{1}', calling element: '{2}'", _webDriver.Url, by, _sourceBy), ex); } } public ReadOnlyCollection<IWebElement> FindElements(By @by) { try { return _webElement.FindElements(@by); } catch (Exception ex) { throw new Exception(string.Format("FindElements failed at: '{0}', by: '{1}', calling element: '{2}'", _webDriver.Url, by, _sourceBy), ex); } } public void Clear() { try { _webElement.Clear(); } catch (Exception ex) { throw new Exception(string.Format("Clear failed at: '{0}', calling element: '{1}'", _webDriver.Url, _sourceBy), ex); } } public void SendKeys(string text) { try { _webElement.SendKeys(text); } catch (Exception ex) { throw new Exception(string.Format("SendKeys failed at: '{0}', calling element: '{1}', text: '{2}'", _webDriver.Url, _sourceBy, text), ex); } } public void Submit() { try { _webElement.Submit(); } catch (Exception ex) { throw new Exception(string.Format("Submit failed at: '{0}', calling element: '{1}'", _webDriver.Url, _sourceBy), ex); } } public void Click() { try { _webElement.Click(); } catch (Exception ex) { throw new Exception(string.Format("Click failed at: '{0}', calling element: '{1}'", _webDriver.Url, _sourceBy), ex); } } public string GetAttribute(string attributeName) { return _webElement.GetAttribute(attributeName); } public string GetCssValue(string propertyName) { return _webElement.GetCssValue(propertyName); } public string TagName { get { return _webElement.TagName; } } public string Text { get { return _webElement.Text; } } public bool Enabled { get { return _webElement.Enabled; } } public bool Selected { get { return _webElement.Selected; } } public Point Location { get { return _webElement.Location; } } public Size Size { get { return _webElement.Size; } } public bool Displayed { get { return _webElement.Displayed; } } } }
и WebDriverAdapter
{ public class WebDriverAdapter: FirefoxDriver, IWebDriver { public new IWebElement FindElement(By by) { try { return new WebElementAdapter(base.FindElement(by), this, by); } catch (Exception ex) { throw new Exception(string.Format("FindElement failed at: '{0}', element: '{1}'", base.Url, by.ToString()), ex); } } public new ReadOnlyCollection<IWebElement> FindElements(By by) { try { var adapters = base.FindElements(by).Select(x => new WebElementAdapter(x, this, by)).OfType<IWebElement>().ToList(); return new ReadOnlyCollection<IWebElement>(adapters); } catch (Exception ex) { throw new Exception(string.Format("FindElements failed at: '{0}', element: '{1}'", base.Url, by.ToString()), ex); } } } }
ексепшн появялется конкретно на строчке
return new WebElementAdapter(base.FindElement(by), this, by);
в WebDriverAdapter
ps: если можно еще короткий лекбез по поводу WebElementAdapter и WebDriverAdapter . Зачем они нужны (написали их до меня) ? Могу ли я их кк то усовершенствовать либо они вообще не нужны и смело можно удалить. Уж оень они мешают когда пошагово проходишь тест, т.к на каждом елементе вызывыются.