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

系统权限弹窗
具体业务弹窗
系统权限弹窗
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(\".*允许.*\")")。

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 弹窗处理的更多相关文章

  1. appium -- 页面出现弹窗,关闭后,无法识别页面元素(转)

    原文:https://www.cnblogs.com/leavescy/p/9733001.html; 1. 问题:如图所示:在修改手势密码的过程中,点击了返回按钮后,弹出该弹窗:点击继续设置后,就发 ...

  2. appium -- 页面出现弹窗,关闭后,无法识别页面元素

    1. 问题:如图所示:在修改手势密码的过程中,点击了返回按钮后,弹出该弹窗:点击继续设置后,就发现 driver.getPageSource()获取不到页面元素.在找了一圈无用的资料后,没有什么好的处 ...

  3. appium+python自动化47-首次打开app权限弹窗问题

    前言 用真机运行appium代码,首次打开app有的手机会出现权限弹窗问题,一般这种弹窗都是在引导页前面或者引导页后面出现.权限弹窗上面的按钮都是固定的, 只需要定位到"始终允许" ...

  4. Appium + python -always_allows弹窗

    from appium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.web ...

  5. Appium UiWatchers 监听解决各种非期待弹窗,弹层,弹弹弹等问题

    app自动化时,各种不期待的弹层弹窗,升级广告等时有飞出,由于弹窗具有不定时,不定页面等很多不确定性.有的弹窗很不友好,不×掉,很难进行下一步操作,造成 测试用例失败.而判断是否有弹窗,弹层很麻烦.研 ...

  6. MacOS10.9平台配置Appium+Java环境

    1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html   ...

  7. Windows平台配置Appium+Java环境

    1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装 ...

  8. 转:Windows平台配置Appium+Java环境

    1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装 ...

  9. Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

随机推荐

  1. MSSQL 删除索引

    使用SSMS数据库管理工具删除索引 使用表设计器删除索引 表设计器可以删除任何类型的索引,本示例演示删除XML辅助索引,删除其他索引步骤相同. 1.连接数据库,选择数据库,展开数据库->选择数据 ...

  2. tf.logging.set_verbosity

    tf.logging.set_verbosity (tf.logging.INFO) 作用:将 TensorFlow 日志信息输出到屏幕

  3. python3 爬虫继续爬笔趣阁 ,,,,,,,

    学如逆水行舟,不进则退 今天想看小说..找了半天,没有资源.. 只能自己爬了 想了半天.,,,忘记了这个古老的技能 捡了一下 import requests from bs4 import Beaut ...

  4. BZOJ 5287: [Hnoi2018]毒瘤 动态dp(LCT+矩阵乘法)

    自己 yy 了一个动态 dp 做法,应该是全网唯一用 LCT 写的. code: #include <bits/stdc++.h> #define ll long long #define ...

  5. 使用terraform 生成自签名证书

    terraform 是一个很不错的基础设施工具,我们可以用来做关于基础设施部署的事情,可以实现基础设施即代码 以下演示一个简单的自签名证书的生成(使用tls provider) main.tf 文件 ...

  6. IIS 站点配置文件

    IIS 站点配置文件  C:/Windows/System32/inetsrv/config/applicationHost.config 配置文件示例: <system.application ...

  7. 【csp模拟赛4】基站建设 (station.cpp)

    [题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...

  8. vuex如何实现数据持久化,刷新页面存储的值还存在

    1.安装: npm install vuex-persistedstate --save 2.找到store/index.js import Vue from 'vue' import Vuex fr ...

  9. shell 查看目前机器listen的所有端口

    netstat -lnp 这条命令的意思是列出系统里面监听网络连接的端口号和相应的进程PID.参数说明:-t:表示列出TCP连接(也可以加上-u参数表示同时列出UDP网络连接)-l:表示列出正在网络监 ...

  10. [SNOI2019]纸牌

    传送门 Description 有一副纸牌.牌一共有\(n\)种,分别标有 \(1,2,...,n\),每种有\(C\)张.故这副牌共有\(nC\)张. 三张连号的牌(\(i,i+1,i+2\))或三 ...