В какой то момент при запуске тестов через консоль (agent.bat) build agent перестал находить некоторые nuget packets. Если запускать Teamcity как сервис все билдится отлично. Кто-нибудь сталкивался с такой проблемой?
Не могу выполнить наведение курсора мыши на елемент и кликнуть по нему через 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 . Зачем они нужны (написали их до меня) ? Могу ли я их кк то усовершенствовать либо они вообще не нужны и смело можно удалить. Уж оень они мешают когда пошагово проходишь тест, т.к на каждом елементе вызывыются.
Смотрю данный курс, где человек рассказывает про roi автоматизации.
Человек говорит, что:
1. При roi < 1 "Мы больше тратим, чем получаем от автоматизации"
Основываясь на своих знаниях и опыте, тратим мы только тогда, когда roi у нас отрицательный, при любом положительном roi - инвестиция окупается, а при roi = 0 остаемся при своих. Для наглядности возьмем пример: На нашу инвестицию (затраты) 100 единиц мы получаем доход 150 единиц, или 50 единиц прибыли. roi = 0.5, что является положительным сигналом к осуществлению инвестиции, здесь же нам говорят, что это плохо. Почему прибыльная инвестиция, которая приносит половину прибыли от вложения считается плохой инвестицией?
Прошу помощи у сообщетсва разъяснить данный момент.