Accessibility in Xamarin Popup (SfPopupLayout)
9 Aug 20236 minutes to read
SfPopupLayout supports built-in AutomationId for all its inner elements. These AutomationId
values allow the automation framework to find and interact with the inner elements when the test scripts are run. A unique AutomationId
is maintained for each inner element by prefixing the control’s AutomationId
with the inner element’s Id.
AutomationId for popup view inner elements
The below table illustrates the predefined automation values set internally which can be used to identify the PopupView’s elements.
Element | Value |
---|---|
Header title | "Title" |
Header close button | "Close" |
PopupView content | "MessageView" |
Accept button | "Accept" |
Decline button | "Decline" |
The following screenshot illustrates the AutomationId
values of the inner elements of SfPopupView.
The following code snippet demonstrates how to set AutomationId
to the SfPopupLayout.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:GettingStarted"
x:Class="GettingStarted.MainPage"
Padding="0,40,0,0"
xmlns:sfPopup="clr-namespace:Syncfusion.XForms.PopupLayout;assembly=Syncfusion.SfPopupLayout.XForms">
<sfPopup:SfPopupLayout x:Name="popupLayout"
<sfPopup:SfPopupLayout.PopupView>
<sfPopup:PopupView AutomationId="SyncfusionPopup" AppearanceMode="TwoButton">
</sfPopup:PopupView>
</sfPopup:SfPopupLayout.PopupView>
<sfPopup:SfPopupLayout.Content>
<StackLayout x:Name="mainLayout">
<Button x:Name="clickToShowPopup" Text="Click To Show Popup"
VerticalOptions="Start" HorizontalOptions="FillAndExpand"
Clicked="ClickToShowPopup_Clicked"/>
</StackLayout>
</sfPopup:SfPopupLayout.Content>
</sfPopup:SfPopupLayout>
</ContentPage>
using Syncfusion.XForms.PopupLayout;
namespace GettingStarted
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void ClickToShowPopup_Clicked(object sender, EventArgs e)
{
popupLayout.Show();
}
}
}
The following code snippet demonstrates how to access the inner elements of SfPopupView from the automation script.
[Test]
[Description("SfPopupLayout Automation Id")]
public void SfPopupLayout_AutomationId()
{
// To tap the Accept button
App.Tap("SyncfusionPopup Accept");
// To tap the Decline button
App.Tap("SyncfusionPopup Decline");
// To tap the Close button
App.Tap("SyncfusionPopup Close");
// To tap the Header Title label
App.Tap("SyncfusionPopup Title");
// To tap the MessageView
App.Tap("SyncfusionPopup MessageView");
}
AutomationId for template content
To access the template elements from script, set the AutomationId
directly to the template view from the sample level.
The following code snippet explains how to set AutomationId
for the template content.
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:GettingStarted"
x:Class="GettingStarted.MainPage"
Padding="0,40,0,0"
xmlns:sfPopup="clr-namespace:Syncfusion.XForms.PopupLayout;assembly=Syncfusion.SfPopupLayout.XForms">
<sfPopup:SfPopupLayout x:Name="popupLayout">
<sfPopup:PopupView>
<sfPopup:PopupView.ContentTemplate>
<DataTemplate>
<Button Text="This is SfPopupLayout" BackgroundColor="SkyBlue"
AutomationId="TemplateButton"/>
</DataTemplate>
</sfPopup:PopupView.ContentTemplate>
</sfPopup:PopupView>
</sfPopup:SfPopupLayout.PopupView>
<sfPopup:SfPopupLayout.Content>
<StackLayout x:Name="mainLayout">
<Button x:Name="clickToShowPopup" Text="Click To Show Popup"
VerticalOptions="Start" HorizontalOptions="FillAndExpand"
Clicked="ClickToShowPopup_Clicked"/>
</StackLayout>
</sfPopup:SfPopupLayout.Content>
</sfPopup:SfPopupLayout>
</ContentPage>
using Syncfusion.XForms.PopupLayout;
namespace GettingStarted
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void ClickToShowPopup_Clicked(object sender, EventArgs e)
{
popupLayout.Show();
}
}
}
Refer to the following code snippet to access the template content of SfPopupView from the automation script.
[Test]
[Description("SfPopupLayout Template Automation Id")]
public void Template_AutomationId()
{
// To tap the Content template button
App.Tap("TemplateButton");
}