2012-09-03 55 views
2

有一個在編碼的UI測試WinEdit類的錯誤/限制:重寫OnKeyDown方法或訂閱在一個文本框中KeyDown事件時,無法使用WinEdit.Text屬性。閱讀文本測試

也就是說,當你有這個...

private void myTextbox_KeyDown(object sender, KeyEventArgs e) 
{ 
    // ... 
} 

...這是行不通的:

var edit = new WinEdit(ancestor); 
edit.SearchProperties[WinControl.PropertyNames.ControlName] = "myTextbox"; 
edit.Text = "New value"; // This doesn't work 

我找到一個變通的設定值here

var edit = new WinEdit(ancestor); 
edit.SearchProperties[WinControl.PropertyNames.ControlName] = "myTextbox"; 
Mouse.Click(edit); 
System.Windows.Forms.SendKeys.SendWait("New value"); 

我的問題:沒有人知道一個工作一個輪閱讀價值?

var edit = new WinEdit(Window); 
edit.SearchProperties[WinControl.PropertyNames.ControlName] = "myTextbox"; 
string actual = edit.Text; // This doesn't work 

回答

4

我發現了一個變通自己:

[DllImport("user32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Auto)] 
public static extern bool SendMessage(IntPtr hWnd, int msg, int wParam, StringBuilder lParam); 

const int WM_GETTEXT = 0x000D; 

var edit = new WinEdit(Window); 
edit.SearchProperties[WinControl.PropertyNames.ControlName] = "myTextbox"; 
var sb = new StringBuilder(1024); 
SendMessage(edit.WindowHandle, WM_GETTEXT, sb.Capacity, sb); 
string actual = sb.ToString(); 
+0

你讓我很快樂!非常感謝! – Chin

1

的解決方案是:

假設你有一個文本框一個窗口形式。

//Launch your Application 
ApplicationUnderTest mainWindow = 
ApplicationUnderTest.Launch(@"D:\Samples\YourApplication.exe"); 

//Search Text box in your windows Form 
var username = new WinWindow(mainWindow); 
username.SearchProperties[WinControl.PropertyNames.ControlName] = "txtUserName"; 

//To Set Text or get, Initialize WinEdit object and asign searched object username to WinEdit object editUsername 
WinEdit editUsername = new WinEdit(username) {Text = "Pakistan"}; 

//get text from textbox username 
string text = editUserName.Text; 

感謝,