2016-04-15 30 views
0

在我目前的腳本,Ranorex等待約10分鐘(一些意外的時候,通常只需求等待約6分鐘,但爲了以防萬一腳本是一個緩慢的機器上運行一天)上移動到下一個動作之前。讓Ranorex等到文字變更?

在應用程序中,這是測試的應用程序更改單詞的標題是「做」,例如:

Application title

所以我想知道,是使Ranorex等到的任何方式這段文字改變了嗎?可能是等待,然後每隔10或30秒左右檢查一次,然後再次檢查文本?

我最初的想法是以某種方式創建一些用戶代碼與while循環,它會以某種方式獲得該標題的文本,但我不知道如何去做這個,任何想法的任何幫助嗎?

+0

也許使用'TextChanged'事件,然後將標誌切換爲真來告訴Ranorex它可以繼續。 –

回答

2

那麼你最初的想法是非常正確的。

我會做一個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分鐘)

+0

我建議增加一個最大重試次數,因爲如果完成狀態永遠不會到達,你將以無限循環結束。或者更改此代碼以使用常規重複/直到循環結構,這對於非程序員來說更容易理解... – Sup3rHugh

+1

如果您完全閱讀答案,則可以看到它已在此處提及。 – Martin

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 

替換爲「文本」屬性(在GetAttributeValueText)你需要驗證attibute的名稱。使用Spy來識別屬性名稱。

希望這會有所幫助!

1

我看不到需要編碼的東西。

  1. 添加text = 'done'這樣,如果是「完成」
  2. 在記錄模塊添加動作「等待」,用「存在」,並選擇存儲庫對象
  3. 設置對象只能找到超時值的最大值(在你的榜樣,也許15分鐘) - >如果以「完成」的文字變化,它會立即繼續 - >如果文本沒有在超時內更改將繼續而不 的錯誤信息。
+0

如果在超時時間內找不到該項目,則會執行裁剪。您要麼捕獲它,要麼必須爲WaitForExists功能指定一個「ContinueOnFail」參數。 – Martin

+0

對不起,我的「ExceptionOnFail」 – Martin

+0

這個解決方案很好,但如果測試web元素,Exist語句可能存在問題。在某些應用程序中,它們始終存在(元素只在不相關/適用時隱藏)。 – Sup3rHugh

1

在我的項目,我必須等到狀態更改從一個到另一個,我發現這個方法是最有效的,它不需要代碼:

  1. 使用間諜和查找這個「完成「是,爲它創建一個存儲庫項目
  2. 爲此項目創建新操作:等待(存在並設置所需的時間量)
  3. 修改項目的路徑,請添加:and @ visible ='true'或@text ='完成'

在我的例子,庫項目看起來像這樣://元素[@的AutomationID =「TextRunRoundStatus」和@文本=「播放」]

Ranorex會等到那個時候這個項目存在將繼續進行。