让Ranorex等到文本发生变化?

时间:2016-04-15 12:59:24

标签: c# ranorex

在我当前的脚本中,Ranorex等待大约10分钟(一些应急时间,通常只有需要等待大约6分钟,但以防万一脚本在慢速机器上运行一天)之前继续下一步行动。

在正在测试的应用程序中,应用程序的标题更改为单词" done"像这样:

Application title

所以我想知道,是否有任何方法让Ranorex等到这段文字改变完毕?可能让它等待,然后每隔10或30秒左右检查一次,然后再次检查文本?

我最初的想法是以某种方式创建一些带有while循环的用户代码,它会以某种方式获取此标题的文本,但我不知道如何去做这个,对任何想法的任何帮助?< / p>

4 个答案:

答案 0 :(得分:3)

你最初的想法是完全正确的。

我会使用if / else语句或while循环来处理这个问题。

基本上您需要做的是将显示“完成”的文本对象添加到存储库中。 (对于我们的例子,我们假设文本值有2个状态 - “等待”和“完成”)

为了处理文本更改,我将实现以下userCode方法:

public void WaitForTextChange()
{
    if (repo.Dom.TextObject.InnerText == "Wait")
    {
        Delay.Duration(30000); // Waits for 30 seconds
        WaitForTextChange();
    } else {
        // Continue with test
        Report.Info("State changed to 'Done'");
    }
}

基本上如果达到“else”语句,循环将被转义。

另外你可以做的是添加一个标志和一个计数器,如果计数器达到20,则测试失败(这意味着测试运行了大约10分钟)

答案 1 :(得分:2)

以下是我们在这里使用的代码构造示例(以避免无限循环)来验证值(对不起它在VB.NET中):

Dim retries as Integer = 30
Do
    Report.Info(String.Format("Waiting for expected value ({0})", retries))
    retries -= 1
    'Waiting 1 second
    Threading.Thread.Sleep(1000)
Loop Until String.Equals(repo.Item.Element.GetAttributeValueText("Text"), "ExpectedValue") OrElse retries > 0

if retries <= 0 Then
    Throw New RanorexException("Expected value not reached!")
Else
    Report.Info("Actual value is as expected.")
End If

将“Text”属性(在GetAttributeValueText中)替换为您需要验证的attibute的名称。使用Spy识别属性名称。

希望这有帮助!

答案 2 :(得分:1)

我没有看到编码的必要性。

  1. 添加text = 'done',以便只有在&#39;完成&#39;
  2. 后才能找到该对象
  3. 在录制模块中添加动作&#39;等待&#39;,使用&#39;存在&#39;并选择存储库对象
  4. 将超时值设置为最大值(在您的示例中可能为15分钟) - &GT;如果文字改为&#34;完成&#34;它会立即继续 - &GT;如果文本在超时内没有改变,它将继续没有 错误信息。

答案 3 :(得分:1)

在我的项目中,我必须等到状态从一个变为另一个,我发现这种方法最有效,它不需要代码:

  1. 使用间谍并找到这个&#34;完成&#34;是,为它创建一个存储库项目
  2. 为此项目创建新操作:等待(存在并设置所需的时间)
  3. 修改项目的路径,添加:和@visible =&#39; true&#39;或@text =&#39;完成&#39;
  4. 在我的示例中,存储库项看起来像这样:// element [@automationid =&#39; TextRunRoundStatus&#39;和@text =&#39;播放&#39;]

    Ranorex会等到这个项目存在然后才会继续。