Перейти к содержимому

Фотография

Не могу выполнить наведение курсора мыши на елемент и кликнуть

Selenium

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 el_matador

el_matador

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:qa


Отправлено 30 декабря 2016 - 15:53

Не могу выполнить наведение курсора мыши на елемент и кликнуть по нему через 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 . Зачем они нужны (написали их до меня) ? Могу ли я их кк то усовершенствовать либо они вообще не нужны и смело можно удалить. Уж оень они мешают когда пошагово проходишь тест, т.к на каждом елементе вызывыются.


  • 0

#2 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 31 декабря 2016 - 03:20

попробуйте добавить

метод для получения _webElement из объекта класса WebElementAdapter 

 

 

        public IWebElement WrappedElement
        {
            get { return this._webElement; }
        }

и уже его посылайте объекту класса  Action

 

actions.MoveToElement(element.WrappedElement).Build().Perform();

 

- предложено на основе опыта с другим похожим оберткой
https://github.com/b.../protractor-net
и именно с actions...
но честно говоря не помню в C# или в Java
клиенте ...
https://github.com/c...os0/jProtractor

 


  • 0



Темы с аналогичным тегами Selenium

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных