I am using native android apps and need to automate. I am stuck at a point where appium does not identify system alert pop ups.
I have tried adding implicit wait conditions, thread.sleep, and switchTo alerts. Nothing seems to work in this case.
driver.manage().timeouts().implicitlyWait(25,TimeUnit.SECONDS);
MobileElement clickOK= (MobileElement) driver.findElement(By.id(“android:id/button1”));
(and)
driver.switchTo().accept().alert();
alert.accept();
- if it permission you can accept them ALL on driver start with capabilities
capabilities.setCapability(AndroidMobileCapabilityType.AUTO_GRANT_PERMISSIONS, true);
- if not -> show us your dialog with pageSource tree
No, the alerts are not permissions. Here is the HTML
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy index="0" class="hierarchy" rotation="0" width="1080" height="2061">
<android.widget.FrameLayout index=“0” package=“com.appname” class=“android.widget.FrameLayout” text="" checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[28,848][964,1302]" displayed=“true”>
<android.widget.FrameLayout index=“0” package=“com.appname” class=“android.widget.FrameLayout” text="" checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,892][964,1302]" displayed=“true”>
<android.widget.FrameLayout index=“0” package=“com.appname” class=“android.widget.FrameLayout” text="" resource-id=“android:id/content” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,892][964,1302]" displayed=“true”>
<android.widget.LinearLayout index=“0” package=“com.appname” class=“android.widget.LinearLayout” text="" resource-id=“android:id/parentPanel” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,892][964,1302]" displayed=“true”>
<android.widget.LinearLayout index=“0” package=“com.appname” class=“android.widget.LinearLayout” text="" resource-id=“android:id/topPanel” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,892][964,1043]" displayed=“true”>
<android.widget.LinearLayout index=“0” package=“com.appname” class=“android.widget.LinearLayout” text="" resource-id=“android:id/title_template” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,892][964,1021]" displayed=“true”>
<android.widget.TextView index=“0” package=“com.appanme” class=“android.widget.TextView” text=“Message” resource-id=“android:id/alertTitle” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[138,942][942,1021]" displayed=“true” />
</android.widget.LinearLayout>
<android.view.View index=“1” package=“com.appname” class=“android.view.View” text="" resource-id=“android:id/titleDividerNoCustom” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1021][964,1043]" displayed=“true” />
</android.widget.LinearLayout>
<android.widget.FrameLayout index=“1” package=“com.appname” class=“android.widget.FrameLayout” text="" resource-id=“android:id/contentPanel” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1043][964,1175]" displayed=“true”>
<android.widget.ScrollView index=“0” package=“com.appname” class=“android.widget.ScrollView” text="" resource-id=“android:id/scrollView” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1043][964,1105]" displayed=“true”>
<android.widget.LinearLayout index=“0” package=“com.appname” class=“android.widget.LinearLayout” text="" checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1043][964,1105]" displayed=“true”>
<android.widget.TextView index=“0” package=“com.appname” class=“android.widget.TextView” text=“Appointment successfully created !” resource-id=“android:id/message” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1043][964,1105]" displayed=“true” />
</android.widget.LinearLayout>
</android.widget.ScrollView>
</android.widget.FrameLayout>
<android.widget.ScrollView index=“2” package=“com.appname” class=“android.widget.ScrollView” text="" resource-id=“android:id/buttonPanel” checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“true” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1175][964,1302]" displayed=“true”>
<android.widget.LinearLayout index=“0” package=“com.appname” class=“android.widget.LinearLayout” text="" checkable=“false” checked=“false” clickable=“false” enabled=“true” focusable=“false” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[72,1175][964,1302]" displayed=“true”>
<android.widget.Button index=“0” package=“com.appname” class=“android.widget.Button” text=“OK” resource-id=“android:id/button1” checkable=“false” checked=“false” clickable=“true” enabled=“true” focusable=“true” focused=“false” long-clickable=“false” password=“false” scrollable=“false” selected=“false” bounds="[799,1186][964,1302]" displayed=“true” />
</android.widget.LinearLayout>
</android.widget.ScrollView>
</android.widget.LinearLayout>
</android.widget.FrameLayout>
</android.widget.FrameLayout>
</android.widget.FrameLayout>
It could be the alert is a part of another window. In this case changing of enableMultiWindows
setting to true
might help to see the dialog.
you code does no look much wrong try:
- enable on phone in developer menu to show touches - you can see where tap actually happen
- try also:
List<MobileElement> okButton = driver.findElements(MobileBy.id("android:id/button1"));
System.out.println("okButton.size(): " + okButton.size()); // check size > 0 = found
TapOptions tapOptions = new TapOptions().withElement(ElementOption.element(okButton.get(0)));
new TouchAction(driver).tap(tapOptions).perform();