在我当前的脚本中,Ranorex等待大约10分钟(一些应急时间,通常只有需要等待大约6分钟,但以防万一脚本在慢速机器上运行一天)之前继续下一步行动。
在正在测试的应用程序中,应用程序的标题更改为单词" done"像这样:
所以我想知道,是否有任何方法让Ranorex等到这段文字改变完毕?可能让它等待,然后每隔10或30秒左右检查一次,然后再次检查文本?
我最初的想法是以某种方式创建一些带有while
循环的用户代码,它会以某种方式获取此标题的文本,但我不知道如何去做这个,对任何想法的任何帮助?< / p>
答案 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)
我没有看到编码的必要性。
text = 'done'
,以便只有在&#39;完成&#39; 答案 3 :(得分:1)
在我的项目中,我必须等到状态从一个变为另一个,我发现这种方法最有效,它不需要代码:
在我的示例中,存储库项看起来像这样:// element [@automationid =&#39; TextRunRoundStatus&#39;和@text =&#39;播放&#39;]
Ranorex会等到这个项目存在然后才会继续。