Robotframewrok里面的三种等待时间区别

文章介绍了Web自动化测试中三种主要的等待方式:强制等待、隐式等待和显式等待,以及它们在RobotFramework(RF)中对应的关键词。强制等待是固定时间间隔,可能造成不必要的延迟。隐式等待是全局设置,可能导致无效等待。显式等待更灵活,能针对特定元素进行等待,提高脚本效率。此外,还提到了设置执行速度和超时时间的关键词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、强制等待

即达到等待时间后再执行操作,最为常用、最简单的等待方式。

缺点是:假设等待设置为5s,不管1s还是2s内元素加载出来,也要等到5s后才会执行下一步操作。

在RF中的关键词是:Sleep

二、隐式等待

全局等待变量的设置,等待时间内会一直刷新页面,直到元素加载出来为止,所以会增加无效的等待时间。

如果超出等待时间,则会抛出异常。

在RF中对应的关键词为:

Get Selenium Implicit Wait【获取默认等待时间】

Set Selenium Implicit Wait【设置隐式等待时间】

Set Browser Implicit Wait【设置隐式等待时间,仅影响当前浏览器】

三、显式等待

局部等待变量设置,针对某个元素设置等待。

等待时间内会定时检测某个元素是否存在或可用,然后再执行下一步操作。

由于针对单个元素,一些加载比较快的元素无需设置,可以针对加载慢的元素进行设置,相对来说可以减少等待时间,便于脚本高效执行。

超出等待时间,则抛异常。

在RF中的关键词是:

Wait Until Element Contains【等待元素匹配

Wait Until Element Is Enabled 【等待元素可用】

Wait Until Element Is Visible 【等待元素可见】

Wait Until Page Contains 【等待页面内容匹配】

Wait Until Page Contains Element 【等待页面元素匹配】

上述关键字后边加定位元素或文本等,当条件为True时,执行下一步操作。

四、其它关于等待的设置

关键字:Get Selenium Speed 与 Set Selenium Speed

从Speed看的出,此关键字用于设置执行速度的,一般用于调试使用,真正执行时一般不会用到哦。

关键字:Get Selenium Timeout 与 Set Selenium Timeout

### 创建和使用弹窗 #### 使用 `PopupWindow` 实现基本弹窗 对于简单的应用内弹窗需求,可以直接利用 `PopupWindow` 类来实现。此方式适用于仅需在当前 Activity 或者 Fragment 上显示的场景。 ```java View popupView = getLayoutInflater().inflate(R.layout.popup_layout, null); final PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.showAtLocation(parentView, Gravity.CENTER, 0, 0); // 显示位置设置为中心 ``` 为了使弹窗能够覆盖其他视图并保持顶层状态,可以通过调整窗口布局类型来达到目的[^1]。 #### 系统级弹窗权限申请 针对需要跨越应用程序边界展示的系统级弹窗,则必须先声明相应的权限,并根据不同版本处理不同的参数配置: - 对于 API Level 小于 Oreo (API level 26) 的设备,应请求 `SYSTEM_ALERT_WINDOW` 权限; - 当目标 SDK 版本大于等于 Oreo 时,则应该改为请求 `SYSTEM_OVERLAY_WINDOW` 权限[^3]。 ```xml <!-- AndroidManifest.xml --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <!-- or for newer versions --> <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/> ``` 接着,在代码逻辑里判断当前系统的 API Level 并相应地设定 WindowManager 参数: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; } else { params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; } ``` #### 复杂情况下的解决方案 然而,由于不同制造商可能对框架进行了自定义更改,单纯依靠反射调用内部方法可能会遇到兼容性问题。此时建议采用官方推荐的方式构建服务端组件,比如通过继承 `Service` 类并在其中管理浮动窗口生命周期,从而绕过潜在的安全限制[^4]。 另外一种思路是在特定条件下触发广播接收器监听事件,进而动态加载指定 UI 组件作为临时界面呈现给用户查看。这种方式不仅提高了灵活性还增强了安全性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值