Автоматизация LeanFT C#; Нажатие на исключение выбрасывания элемента управления wpf

Получение HP.LFT.SDK.GeneralReplayException: One or more specified arguments are not validпри попытке нажать на кнопку wpf (используя LeanFT с C#, интегрированным в Visual Studio 2015)

Учитывая код ниже:

// Identify the "LicensingButton" button
var LicensingButton = objAdminApplicationModel.wnd_Adminstration.Describe<IButton>(new ButtonDescription
    {
        Text = @"Licensing",
        ObjectName = @"Licensing"
    });
// Click the Licensing button.
LicensingButton.Click();

Но я получаю ниже исключения

Exception is HP.LFT.SDK.GeneralReplayException: One or more specified arguments are not valid.
   at HP.LFT.SDK.Core.ClassModel.TestObjectExecuterBase.HandleReplayError(Int32 errorCode, IDictionary`2 data)
   at HP.LFT.SDK.Core.Communication.CommunicationClient.HandleError(Action`2 onError, Int32 status, IDictionary`2 data)
   at HP.LFT.SDK.Core.Communication.CommunicationClient.Send(String messageType, IDictionary`2 data, Action`2 onError)
   at HP.LFT.SDK.Core.ClassModel.TestObjectExecuter.ExecuteMethod(String methodName, Object[] arguments)
   at HP.LFT.SDK.Core.ClassModel.TestObjectBase.ExecuteMethod(String methodName, Object[] arguments)
   at HP.LFT.SDK.ClickBehaviour.Click(MouseButton button)
   at HP.LFT.SDK.UiObjectBase.<>c__DisplayClassd.<Click>b__c()
   at HP.LFT.SDK.OperationExecutionWrapper.ExecuteWithEvents(ITestObject testObject, Object additionalInfo, Action innerAction, MethodBase methodInfo, Boolean reportOnlyOnError, Object[] arguments)
   at HP.LFT.SDK.OperationExecutionWrapper.ExecuteWithEvents[T1](Action innerAction, Action`1 originalMethod, T1 param1, Boolean reportOnlyOnError, ITestObject testObject, Object additionalInfo)
   at HP.LFT.SDK.UiObjectBase.Click(MouseButton button)
   at Admin4DM.Test.Licensing.Licensing_VerifyStaticTextDisplay() in C:\Source\Automation\Test\Licensing.cs:line 32

1 ответ

Исключение действительно вводит в заблуждение. На первый взгляд я подумал ButtonDescription неправильно построен, это означает, что один из Text или же ObjectName собственность ожидает какую-то другую ценность.

Но это не так.

Проблема полностью заключается в операции щелчка. Как вы можете видеть при проверке Click Метод, он имеет две перегрузки:

  1. Ожидая MouseButton перечисление;

    Когда мы звоним Click и мы не передаем перечисление или объект, MouseButton.Left Значение enum используется по умолчанию, но вы также можете указать .Middle или же .Right,

  2. Ожидая ClickArgs объект, в виде:

    new ClickArgs {
        Button = MouseButton.Left,
        Location = Position.Center
    }
    

    Location указывает, где нажать кнопку. (.BottomLeft, .BottomRight, .Center, .TopLeft а также .TopRight).

    На самом деле, если мы используем MouseButton перегрузка, он все еще использует Position но нажимает на Position.Center по умолчанию.

Теперь, когда теория окончена (фу), давайте посмотрим, что происходит на практике.

Исключение, которое мы видим, показывает нам, что при нажатии на эту кнопку что-то явно пошло не так, в частности, при попытке нажать на кнопку было выдано исключение Position.Center с MouseButton.Left, Как .Center рассчитывается на основе свойства ширины и высоты кнопки, вероятно, есть некоторая проблема с кнопкой, которая вызывает неправильные вычисления (к сожалению, я могу только предположить это, я не могу вам точно сказать).

Кстати, если это происходит на любой кнопке проверяемого AUT, скорее всего, разработчики делают что-то не так, как это не часто (например, на WPF Я тестирую, у меня нет проблем ни с одной из кнопок).

Что мы можем сделать, это попытаться сделать следующее:

  1. Попробуйте нажать с .Middle или же .Right;
  2. Попробуйте нажать в других местах кнопки, используя Position перечисление;
  3. Попробуйте нажать в других положениях кнопки, используя HP.SDK.LFT.Mouse;

    // Use Mouse class to click on the button in a fine tuned location
    var loc = LicensingButton.AbsoluteLocation;
    var p = new System.Drawing.Point(loc.X + 5, loc.Y + 5);
    
    Mouse.Click(p, MouseButton.Left);
    
  4. Попробуйте определить объект как идентификацию на основе изображений Insight;

  5. Попробуйте определить объект с помощью VRI;
  6. Попробуйте определить некоторый родительский объект (если возможно) и выполните Click операция таким образом, что он "нажимает" на кнопку, которую вы хотите нажать
Другие вопросы по тегам