appium 弹窗处理

摘要:
测试过程中遇到两类弹窗:系统权限弹窗具体业务弹窗系统权限弹窗Android系统权限弹窗一般出现在安装app后首次打开,如:定位权限、电话权限等。我们可以按顺序执行测试用例,将该类操作放到InitTest中执行,第一个执行。以appium+testng为例:testng.xml,preserve-order="true"即可DriverUtil.javakeepClickElement方法中循环点击处理权限数量不确定的情况,如图,组团来了3个权限。

测试过程中遇到两类弹窗:

系统权限弹窗
具体业务弹窗
系统权限弹窗
Android
系统权限弹窗一般出现在安装 app 后首次打开,如:定位权限、电话权限等。我们可以按顺序执行测试用例,将该类操作放到 InitTest 中执行,第一个执行。
以 appium + testng 为例:
testng.xml,preserve-order="true"即可

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" parallel="false">
    <test name="test" preserve-order="true">
        <classes>
            <class name="com.qa.test.InitTest"/>
            <class name="com.qa.test.BannerTest"/>
            <class name="com.qa.test.HomeListTest"/>
        </classes>
    </test>
</suite>

DriverUtil.java

keepClickElement 方法中循环点击处理权限数量不确定的情况,如图,组团来了3个权限。
匹配控件时,建议使用 textMatches 正则,可以很好得解决不同系统权限控件差异性问题,小米的叫“允许”,华为的叫“始终允许”,不知道其他系统还有啥叫法,目前这个 UiSelector 能 cover 住 new MobileBy.ByAndroidUIAutomator("new UiSelector().className("android.widget.Button").textMatches(".*允许.*")")。

appium 弹窗处理第1张

public class DriverUtil {
    /**
     * 持续点击控件
     *
     * @param driver
     * @param by
     */
    public static void keepClickElement(AppiumDriver driver, By by) {
        try {
            WebElement element = driver.findElement(by);
            while (true) {
                if (element.isDisplayed()) {
                    element.click();
                } else {
                    break;
                }
            }
        } catch (NoSuchElementException e) {
            Logger.debug("未找到该控件: " + by);
        }
    }
 
    /**
     * 出现阻塞步骤的系统弹窗时,accept 继续
     *
     * @param driver
     */
    public static void acceptPermission(AppiumDriver driver) {
        clickElement(driver, new MobileBy.ByAndroidUIAutomator("new UiSelector().className("android.widget.Button").textMatches(".*允许.*")"));
    }

}

InitTest.java

public class InitTest extends TestCase {
@Test
public void init() {
Logger.info("关闭系统弹窗");
DriverUtil.acceptPermission(driver);
Logger.info("关闭门店选择弹窗");
String poiByString = "new UiSelector().resourceId("com.meituan.retail.c.android:id/rv_poi_addresses").childSelector(new UiSelector().textMatches(".*测试.*"))";
DriverUtil.clickElement(driver, new MobileBy.ByAndroidUIAutomator(poiByString));
}
}

iOS
iOS 直接在 Capability 中设置 autoAcceptAlerts 为 true 即可
参考:Appium 服务器初始化参数(Capability)

具体业务弹窗
具体业务弹窗与系统权限弹窗处理方法基本一致,遇到具体问题我们再讨论。

免责声明:文章转载自《appium 弹窗处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在App中添加微信分享功能ANDROID权限机制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Appium(四):真实机第一个appium程序、模拟器第一个appium程序、查看元素

1. 真实机第一个appium程序 学完了前面的知识,也将环境搭建好了,接下来我们就正式开始appium的学习了。 在做app自动化的时候,我们肯定是针对某个产品、某个软件进行测试,那么我们一定是先让模拟器或真机帮我们打开这款软件才可以。所以接下来要学的就是如何打开某个应用程序。 启动步骤: USB连接手机,开启调试模式 打开appium工具 创建pyth...

Android自动化测试学习路线

最近在整理Android自动化测试的相关资料,大体上把一些知识点梳理了,这里做一个简单的分享! Android里面测试相关的工具和框架太多了。你应该从以下几个方面入手。 编程语言的选择 如果你要学习的是Appium的话,当然它是移动自动化测试领域最流主流的工具之一,同时支持iOS和Android两大平台,最主要是还支持多种编程语言(Java/Python...

Appium(八):Appium API(二) 元素等待、元素操作

1. 元素等待 我们在使用脚本的时候,可能会由于网络、服务器处理、电脑等原因,我们想要找的元素没有加载出来,这个时候如果直接定位就可能会报错。 这个时候我们就可以设置元素等待了。 什么叫元素等待呢? 就是WebDriver定位页面元素时如果没有找到,就会在指定时间内一直等待的过程。 元素等待一共分为两种类型:显示等待和隐式等待。 1.1 隐式等待 隐式等待...

七 APPIUM Android 定位方式

1.定位元素应用元素   1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElement(By.id("com.tencent.mm:id/do")); 或者: driver.findElementById("com.tencent.mm...

appium简明教程(11)——使用resource id定位(仅支持安卓4.3以上系统)

上一节乙醇带大家了解了appium的定位策略。实际上appium的控件定位方式是完全遵守webdriver的mobile扩展协议的。 这一节将分享一下如何使用resource id来定位android策略。 什么是resource id,这个不属于本文的范畴,大家可以点这里了解。 我们可以有两种方式来使用resource id进行定位: 使用findEl...

三 APPIUM Android自动化 测试初体验

1.创建一个maven项目 成功新建工程: 编辑pom.xml,在<dependencies></dependencies>下添加appium相关依赖: <dependency> <groupId>org.testng</groupId> <artifactId>...