none
Automating WPF

    General discussion

  • Hi guys

     

    I'm trying to automate a WPF application. I use UISpy & UI automation. UI spy has Control View & Raw View. The UI spy shows things on my WPF application like Static textboxes, grid controls etc in the raw view but doenst show them in the Control view. How do I make my WPF application to make these controls show in the control view. Any ideas/suggestions will be welcomed.

     

    Mateen

    Monday, April 30, 2007 11:26 PM

All replies

  • Can you give an example of which controls are not shown that you want to be shown? Or is this a situation where you're writing a custom control that you would ike to enable automation for?

     

    Also, so that we're on the same page, you do realize the point of the control view is to only show things that are logically important to the user for input purposes, right?

     

    -Drew

    Tuesday, May 01, 2007 12:35 AM
    Moderator
  • Ok I have implemented a text block in grid format. below is the sample XAML I have implemented

    Code Snippet

    <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
     <Grid AutomationProperties.AutomationId="G1" ShowGridLines="false"
                                      Margin="4">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition/>
                                        <ColumnDefinition/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition/>
                                        <RowDefinition/>
                                        <RowDefinition/>
                                        <RowDefinition/>
                                    </Grid.RowDefinitions>
                                    <Border BorderBrush="White"
                                            BorderThickness="1"
                                            Grid.Row="0"
                                            Grid.Column="0">
                                        <TextBlock >
                                            First Name
                                        </TextBlock>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="0,1,1,1"
                                            Grid.Row="0"
                                            Grid.Column="1">
                                        <TextBlock>
                                            <TextBlock Text="Dummy1"/>
                                        </TextBlock>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="1"
                                            Grid.Row="1"
                                            Grid.Column="0">
                                        <TextBlock >
                                            last Name
                                        </TextBlock>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="0,1,1,1"
                                            Grid.Row="1"
                                            Grid.Column="1">
                                        <TextBlock  Text="Dummy2"/>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="1"
                                            Grid.Row="2"
                                            Grid.Column="0">
                                        <TextBlock  >
                                            Middle Name
                                        </TextBlock>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="0,1,1,1"
                                            Grid.Row="2"
                                            Grid.Column="1">
                                        <TextBlock  Text="Dummy3"/>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="1"
                                            Grid.Row="3"
                                            Grid.Column="0">
                                        <TextBlock  >
                                            Date
                                        </TextBlock>
                                    </Border>
                                    <Border BorderBrush="White"
                                            BorderThickness="0,1,1,1"
                                            Grid.Row="3"
                                            Grid.Column="1">
                                        <TextBlock  Text="Dummy4"/>
                                    </Border>
                                </Grid>
    </Page>



    If you look at the above code snippet, the above grid control doesnt show up in the UISpy control view. Is it coz its non interactive? If so how when I do validation how do I automate it?  How ever they show up on the raw view mode. Is there anything I can do to make it appear in the control view?


    Thanks,



    Tuesday, May 01, 2007 6:30 PM
  • I'm a little confused 'cause you're asking about doing validation and automating, but you're also asking about UISpy. Do you just want to know how to get at the TextBlock's yourself using the automation API? If so, you're looking for RawViewWalker. If not, I still need more of an explanation of what you're trying to accomplish.

     

    HTH,
    Drew

    Tuesday, May 01, 2007 9:10 PM
    Moderator
  • Dont worry about this. I got this solved. Anyways thanks for ur prompt reply. I made further research on WPF & found out that,

    an elements apperance in Raw View or Control view depends on the property of UI element defined by WPF. So all interactive elements like Textboxes, links, buttons etc appear in control view. While all non interactive elements like, Plain text, grid layout & canvas etc appear in raw view. Infact canvas doesnt appear in raw view either.

    Tuesday, May 08, 2007 7:24 PM