1

获取HP.LFT.SDK.GeneralReplayException: One or more specified arguments are not valid,同时尝试单击 wpf 按钮(使用 LeanFT 和 Visual Studio 2015 中集成的 C#)

鉴于以下代码:

// 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
4

1 回答 1

1

这个例外确实具有误导性。乍一看,我认为它的ButtonDescription构造不正确,这意味着其中一个TextorObjectName属性需要其他值。

但事实并非如此。

问题完全出在点击操作上。正如您在检查该Click方法时所看到的,它有两个重载:

  1. 期待一个MouseButton枚举;

    当我们调用Click并且我们不传递枚举或对象时,MouseButton.Left默认使用枚举值,但您也可以指定.Middleor .Right

  2. 期望一个ClickArgs对象,形式为:

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

    Location指示单击按钮的位置。( .BottomLeft, .BottomRight, .Center,.TopLeft.TopRight)。

    实际上如果我们使用MouseButton重载,它仍然使用PositionPosition.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以“点击”您想要实际单击的按钮的方式执行操作
于 2018-01-17T05:13:21.997 回答