在Windows Phone 8中,可以通过代码模拟按钮点击来触发一个按钮。
第一、对Button写个静态扩展类
public static class ButtonBaseExtensions
{
public static void PerformClick(this System.Windows.Controls.Button button)
{
System.Windows.Automation.Peers.ButtonAutomationPeer buttonPeer = new System.Windows.Automation.Peers.ButtonAutomationPeer(button);
System.Windows.Automation.Provider.IInvokeProvider invokeProvider = buttonPeer.GetPattern(PatternInterface.Invoke) as System.Windows.Automation.Provider.IInvokeProvider;
invokeProvider.Invoke();
}
}
第二、测试
<Grid x:Name="ContentPanel"
Grid.Row="1"
Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Name="btn1"
Width="212"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Click="Button_Click"
Content="Button1" />
<Button Name="btn2"
Grid.Row="1"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Click="Button_Click_1"
Content="Button2" />
</Grid>
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("测试模拟按钮点击", "提示", MessageBoxButton.OKCancel);
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
//Button_Click(sender, e);
btn1.PerformClick();
}
如果直接调用Button_Click事件,也可以触发,但是调用时会发现Button_Click事件中的Sender实际是btn2。如果通过PerformClick来触发,则是模拟的在手机屏幕上点击按钮btn1来触发的事件,Button_Click事件中的sender为btn1。
思考:
1、我们是否可以通过此方法扩展,实现对Windows Phone的自动化测试研究
2、展开PatternInterface,发现它是一个枚举,有很多操作类型,是否可以实现其他的操作?枚举如下
// Summary:
// Specifies the control pattern that the System.Windows.Automation.Peers.AutomationPeer.GetPattern(System.Windows.Automation.Peers.PatternInterface)
// method returns.
public enum PatternInterface
{
// Summary:
// The System.Windows.Automation.Provider.IInvokeProvider control pattern interface.
Invoke = 0,
//
// Summary:
// The System.Windows.Automation.Provider.ISelectionProvider control pattern
// interface.
Selection = 1,
//
// Summary:
// The System.Windows.Automation.Provider.IValueProvider control pattern interface.
Value = 2,
//
// Summary:
// The System.Windows.Automation.Provider.IRangeValueProvider control pattern
// interface.
RangeValue = 3,
//
// Summary:
// The System.Windows.Automation.Provider.IScrollProvider control pattern interface.
Scroll = 4,
//
// Summary:
// The System.Windows.Automation.Provider.IScrollItemProvider control pattern
// interface.
ScrollItem = 5,
//
// Summary:
// The System.Windows.Automation.Provider.IExpandCollapseProvider control pattern
// interface.
ExpandCollapse = 6,
//
// Summary:
// The System.Windows.Automation.Provider.IGridProvider control pattern interface.
Grid = 7,
//
// Summary:
// The System.Windows.Automation.Provider.IGridItemProvider control pattern
// interface.
GridItem = 8,
//
// Summary:
// The System.Windows.Automation.Provider.IMultipleViewProvider control pattern
// interface.
MultipleView = 9,
//
// Summary:
// The System.Windows.Automation.Provider.IWindowProvider control pattern interface.
Window = 10,
//
// Summary:
// The System.Windows.Automation.Provider.ISelectionItemProvider control pattern
// interface.
SelectionItem = 11,
//
// Summary:
// The System.Windows.Automation.Provider.IDockProvider control pattern interface.
Dock = 12,
//
// Summary:
// The System.Windows.Automation.Provider.ITableProvider control pattern interface.
Table = 13,
//
// Summary:
// The System.Windows.Automation.Provider.ITableItemProvider control pattern
// interface.
TableItem = 14,
//
// Summary:
// The System.Windows.Automation.Provider.IToggleProvider control pattern interface.
Toggle = 15,
//
// Summary:
// The System.Windows.Automation.Provider.ITransformProvider control pattern
// interface.
Transform = 16,
//
// Summary:
// The System.Windows.Automation.Provider.ITextProvider control pattern interface.
Text = 17,
}