[英]how to handle alerts in android using appium
如何使用 Appium 服務器 (1.0.1) 和 Android SDK 在 Android Web 應用程序中處理警報?
以下代碼不適用於android:
driver.switchTo().accept().alert();
錯誤信息:
> -modal window does not get closed
在嘗試接受警報之前,您需要先獲得警報
這是來自一些Appium Java 客戶端測試的代碼:
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.accept();
這應該在大部分時間都有效。
如果accept()
不起作用,請替換driver.switchTo().alert();
和alert.accept();
用代碼找到按鈕,然后單擊它。
如果沒有找到按鈕,請在 try/retry 塊中包裝findElementBy(Method)
代碼,然后單擊它。
最好的方法是使用 appium 檢查器。 單擊該元素並從中復制資源 ID 。 在findElement(By.id())方法中使用此資源 ID。
對我來說資源 ID:android:id/button1
((AndroidDriver) driver).findElement(By.id("android:id/button1")).click();
這是針對安卓的。 對於常規使用,您可以使用
driver.findElement(By.id("android:id/button1")).click();
一些警報可能是原生 Android 的警報,不是由瀏覽器生成的。 在這種情況下,以下代碼:
Alert alert = driver.switchTo().alert(); alert.accept();
可能會拋出: WebDriverException: unknown error: unhandled inspector error: {"code":-32603,"message":"No JavaScript dialog to handle"}
要處理此類警報,只需切換到本機應用程序上下文,執行所需操作,然后切換回瀏覽器:
AppiumDriver<WebElement> appiumDriver = (AppiumDriver<WebElement>) webDriver;
String currentContext = appiumDriver.getContext();
appiumDriver.context("NATIVE_APP");
// actions within the alert
appiumDriver.findElements(By.xpath(OK_BUTTON_LOCATOR)).click(); // put locator instead of OK_BUTTON_LOCATOR
appiumDriver.context(currentContext);
// continue working
WebElement btn = driver.findElement(By.xpath("//android.widget.Button[@content-desc='OK']"));
TouchAction act = new TouchAction(driver);
act.tap(241,320).perform();
(241,320) 這些是警報的 X 和 Y c 坐標這對我來說非常有用
Appium 具有接受、解除警報的默認功能
capabilities.SetCapability("autoAcceptAlerts", true);
capabilities.SetCapability("autoDismissAlerts", true);
請使用以下代碼,在單擊“確定”按鈕之前添加一些等待。 之后通過你的確定按鈕的xpath。
synchronized (driver)
{
driver.wait(2000);
}
driver.context(NATIVE_APP);
driver.findElementByXPath{("//android.widget.Button[@resourceid=
‘android:id/button1’]").click();
如果警告顯示在 Ui 上,當我們需要等待時需要更多時間來顯示..我們可以使用流暢的等待而不是這個..
因此,對此的更新答案是: AlertDialog 是系統級元素,因此單擊接受按鈕應該使用:
androidDriver.findElementById("android:id/button1").click()
否則取消執行此操作:
androidDriver.findElementById("android:id/button2").click()
// 首先檢查警報是否存在
public boolean isAlertPresent() {
try {
mobDriver.switchTo().alert();
log.info("ALERT IS PRESENT !! ");
return true;
} catch (Exception e) {
log.info("ALERT IS NOT PRESENT !! ");
return false;
}
}
public void mobileAlertHandle() {
if (isAlertPresent()) {
Alert alert = mobDriver.switchTo().alert();
alert.accept();
}
}
如果這不起作用,請檢查您的元素並嘗試使用 id 或 name
例如: mobDriver.findElementById("android:id/button2").click()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.