У меня была похожая проблема, как и у вас, вот как я решил это:
Это часть кода из объекта моей страницы, где при нажатии на useGPS отображается собственное уведомление Android, разрешающее или блокирующее использование GPS,
public Alert clickButtonUseGPSwithAlert() {
buttonUseGps.click();
Validate.action(getSessionInfo(), "click button 'Use a GPS'");
Alert alert = new Alert(getSessionInfo());
return alert;
}
и вот переопределенный класс Alert
,
import io.appium.java_client.MobileElement;
import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
import io.appium.java_client.pagefactory.WithTimeout;
import org.openqa.selenium.support.PageFactory;
import pageObjects.Screen;
import utils.Validate;
import java.util.concurrent.TimeUnit;
public class Alert extends Screen implements org.openqa.selenium.Alert {
@AndroidFindBy(id = "com.android.packageinstaller:id/dialog_container")
@WithTimeout(time = 3, unit = TimeUnit.SECONDS)
public MobileElement alertControl;
@AndroidFindBy(id = "com.android.packageinstaller:id/permission_message")
@WithTimeout(time = 3, unit = TimeUnit.SECONDS)
private MobileElement content;
@AndroidFindBy(id = "com.android.packageinstaller:id/permission_allow_button")
@WithTimeout(time = 3, unit = TimeUnit.SECONDS)
private MobileElement buttonAccept;
@AndroidFindBy(id = "com.android.packageinstaller:id/permission_deny_button")
@WithTimeout(time = 3, unit = TimeUnit.SECONDS)
private MobileElement buttonDismiss;
public Alert(SessionInfo sessionInfo){
super(sessionInfo);
PageFactory.initElements(new AppiumFieldDecorator(sessionInfo.getMobileDriver(), 3, TimeUnit.SECONDS), this);
WaitUtils.isElementPresent(sessionInfo.getMobileDriver(),alertControl,2);
if (!Util.areElementsLoaded(alertControl, content, buttonAccept, buttonDismiss)) {
setLoaded(false);
} else {
setLoaded(true);
}
Validate.isScreenLoaded(getSessionInfo(), this.isLoaded());
}
@Override
public void dismiss() {
buttonDismiss.click();
Validate.action(getSessionInfo(), "ALERT - click button 'Dismiss'");
}
@Override
public void accept() {
buttonAccept.click();
Validate.action(getSessionInfo(), "ALERT - click button 'Accept'");
}
@Override
public String getText() {
String value = content.getText();
Validate.action(getSessionInfo(), "ALERT - get content");
return value;
}
@Override
public void sendKeys(String s) {
}
}
Игнорировать расширение экрана, попробуйте использовать реализацию существующего оповещения (пакет org.openqa.selenium.Alert).
Я знаю, что это не решение 1: 1 Вы должны настроить его, чтобы включить в свой код, но главное - попытаться переопределить Alert и дождаться появления элемента, а затем взаимодействовать с ним.
Надеюсь, это поможет Вам,