2

Coded UI Testクラスにはバグ/制限があります。メソッドWinEditをオーバーライドしたり、テキストボックスでイベントをOnKeyDownサブスクライブしたりすると、プロパティを使用できなくなります。KeyDownWinEdit.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

ここで値を設定するための回避策を見つけました:

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

2 に答える 2

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();
于 2012-09-04T06:35:08.080 に答える
1

解決策は:

1つのテキストボックスを持つ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;

ありがとう、

于 2016-04-15T14:18:07.367 に答える