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

Эффективное использование TestNG и JUnit
онлайн, начало 20 апреля
Логи как инструмент тестировщика
онлайн, начало 23 апреля
Тестирование производительности (HP Load Runner)
онлайн, начало 20 апреля
Управление требованиями
онлайн, начало 20 апреля
Фотография

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

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
  • Pip
  • 60 сообщений
  • ФИО:кузьмин сергей

Отправлено 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 2.0: стартовый уровень
онлайн, начало 13 апреля
Программирование на Java для тестировщиков
онлайн, начало 4 мая
Автоматизация функционального тестирования
онлайн, начало 25 мая
Selenium WebDriver: полное руководство
онлайн, начало 11 мая




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

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

Яндекс.Метрика
Реклама на портале